首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQtoSQL、存储库模式和延迟加载

LINQtoSQL、存储库模式和延迟加载
EN

Stack Overflow用户
提问于 2010-10-07 14:00:07
回答 1查看 368关注 0票数 2

如何在存储库模式中使用LINQtoSQL?

我对L2S很陌生,发现它的延迟加载是使用回购模式的一个真正的障碍。

通常,我会想到这样的存储库模式:

代码语言:javascript
复制
var myCustomer = null;

using (var myRepo = new Repo()){
    myCustomer = myRepo.GetCustomerForCustomerId(123);
}

if(myCustomer.Orders.Any()){
 //do something
}

问题是,当询问L2S时,myCustomer.Orders是否会尝试建立数据连接?这不是会导致无法预测的数据库访问问题吗?

我的意思是,是的,我可以告诉我的回购程序来验证回购中的订单,确信我们完整的测试覆盖可以验证开发人员从来没有调用我们没有显式加载的实体,但是我宁愿摆脱延迟加载/对象-数据文本持久性。

所以我有四个选择

  1. 创建从L2S对象创建的域对象--大量的工作和维护
  2. 创建破坏链接的L2S对象的派生版本(http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx)
  3. 使用LLBLGenPro代替。
  4. 呼吁堆栈溢出读取器的智慧

我现在要和4人一起去。

如何确保在repo关闭后,对象不会调用db?

是的,我读过每一个关于L2S和Repos的堆叠问题,他们都没有回答这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-07 05:07:26

有时,急切地加载实体的子级是有用的。您可以使用DataLoadOptions.LoadWith这样做,它告诉您的DataContext在加载父实体时自动加载实体的子实体。

来自以上MSDN链接的片段

代码语言:javascript
复制
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo

您还可以使用DataLoadOptions.AssociateWith进一步自定义自动加载的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3882383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档