Linq to sql LINQtoSQL、存储库模式和延迟加载

Linq to sql LINQtoSQL、存储库模式和延迟加载,linq-to-sql,repository,repository-pattern,Linq To Sql,Repository,Repository Pattern,如何将LINQtoSQL与存储库模式结合使用 我是L2S新手,发现它的延迟加载是使用回购模式的真正障碍 通常,我认为存储库模式是这样的: var myCustomer = null; using (var myRepo = new Repo()){ myCustomer = myRepo.GetCustomerForCustomerId(123); } if(myCustomer.Orders.Any()){ //do something } 问题是,当我的客户订单被询问时,L2

如何将LINQtoSQL与存储库模式结合使用

我是L2S新手,发现它的延迟加载是使用回购模式的真正障碍

通常,我认为存储库模式是这样的:

var myCustomer = null;

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

if(myCustomer.Orders.Any()){
 //do something
}
问题是,当我的客户订单被询问时,L2S不会尝试建立数据连接吗?这不会导致不可预测的数据库访问问题吗

我的意思是,是的,我可以告诉我的repo验证repo内部的命令,确信我们的完整测试覆盖率可以验证开发人员从不调用我们没有显式加载的实体,但我宁愿放弃延迟加载/对象datacontext持久性

所以我有4个选择

  • 创建从L2S对象创建的域对象–大量工作和维护
  • 创建破坏链接的L2S对象的派生版本(http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx)
  • 改用LLBLGenPro
  • 吸引堆栈溢出读者的智慧
  • 我现在要4个

    我如何确保我的对象在我的回购交易结束后不会调用db?

    是的,我读过所有关于L2和回购的堆栈问题,但没有一个回答这个问题。

    有时候,急切地加载实体的子对象是有用的。您可以这样做,它告诉您的DataContext在加载父实体时自动加载实体的子实体

    以下文件中的代码片段:

    Northwnd db=new Northwnd(@“c:\Northwnd.mdf”);
    DataLoadOptions dlo=新的DataLoadOptions();
    dlo.LoadWith(c=>c.Orders);
    db.LoadOptions=dlo
    

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

    我不知道答案,但我的印象是L2S或任何其他语言层通常比解决问题更可怕。有些人(包括我自己)对不知道幕后发生的事情感到恼火。@vulkanino,只有没有使用L2S的人才能这样说。您更喜欢什么,原始SQL?是的,数据库存储过程中的原始SQL。程序源代码中没有sql代码。我承诺使用一些ORM工具。在过去使用过存储过程和SQL命令之后,我再也不会使用存储过程和SQL命令了。我只是想弄清楚L2S是否以及如何能够像我使用LLBLGenPro时那样控制我。
    Northwnd db = new Northwnd(@"c:\northwnd.mdf");
    DataLoadOptions dlo = new DataLoadOptions();
    dlo.LoadWith<Customer>(c => c.Orders);
    db.LoadOptions = dlo