如何在存储库模式中使用LINQtoSQL?
我对L2S很陌生,发现它的延迟加载是使用回购模式的一个真正的障碍。
通常,我会想到这样的存储库模式:
var myCustomer = null;
using (var myRepo = new Repo()){
myCustomer = myRepo.GetCustomerForCustomerId(123);
}
if(myCustomer.Orders.Any()){
//do something
}问题是,当询问L2S时,myCustomer.Orders是否会尝试建立数据连接?这不是会导致无法预测的数据库访问问题吗?
我的意思是,是的,我可以告诉我的回购程序来验证回购中的订单,确信我们完整的测试覆盖可以验证开发人员从来没有调用我们没有显式加载的实体,但是我宁愿摆脱延迟加载/对象-数据文本持久性。
所以我有四个选择
我现在要和4人一起去。
如何确保在repo关闭后,对象不会调用db?
是的,我读过每一个关于L2S和Repos的堆叠问题,他们都没有回答这个问题。
发布于 2011-01-07 05:07:26
有时,急切地加载实体的子级是有用的。您可以使用DataLoadOptions.LoadWith这样做,它告诉您的DataContext在加载父实体时自动加载实体的子实体。
来自以上MSDN链接的片段
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo您还可以使用DataLoadOptions.AssociateWith进一步自定义自动加载的行为。
https://stackoverflow.com/questions/3882383
复制相似问题