Linq to sql 使用存储库模式的LINQ到SQL

Linq to sql 使用存储库模式的LINQ到SQL,linq-to-sql,design-patterns,Linq To Sql,Design Patterns,目前,我正试图在我的项目中实现LINQ到SQL。我正在尝试使用LINQtoSQL和著名的存储库模式。以下是我想做的: 创建表,例如customer表 为我的客户表生成LINQ到SQL(.dbml) 它生成了包含所有属性和部分方法的部分Customer类 之后,我需要为ex:GetCustomerById(int-id)、GetCustomerByName(string-name)等添加一些自定义方法。因此,我创建了Customer的部分类,并实现了我需要的所有函数 嗯,从这一步开始,我意识到我没

目前,我正试图在我的项目中实现LINQ到SQL。我正在尝试使用LINQtoSQL和著名的存储库模式。以下是我想做的:

  • 创建表,例如customer表
  • 为我的客户表生成LINQ到SQL(.dbml)
  • 它生成了包含所有属性和部分方法的部分Customer类
  • 之后,我需要为ex:GetCustomerById(int-id)、GetCustomerByName(string-name)等添加一些自定义方法。因此,我创建了Customer的部分类,并实现了我需要的所有函数

    嗯,从这一步开始,我意识到我没有实现存储库模式有些奇怪。。图特

    我试图做的是创建一个访问存储库层的业务层,然后存储库层使用LINQtoSQL作为数据模型并访问SQLServer。 这是最好的做法吗?以及如何将存储库模式添加到由LINQ到SQL生成的客户部分类中


    谢谢。

    存储库模式有很多变体。它的一个简单定义是封装/隐藏持久性逻辑的模块,不让其他组件看到

    因此,您可以有一个名为LinqToSqlRepository.cs的类,其方法如下:

    public class LinqToSqlRepository
    {
       private YourDataContext _ctx;
    
       public LinqToSqlRepository()
       {
          _ctx = new YourDataContext();
       }
    
       public Person GetPersonById(int id)
       {
          return _ctx.Persons.SingleOrDefault(p => p.Id == id);
       }
    }
    
    从您的业务层调用它,如下所示:

    var db = new LinqToSqlRepository();
    var person = db.GetPersonById(int id);
    
    理想情况下,您不希望将存储库添加到分部类中。它应该是分开的。您的存储库类应该使用部分类

    但老实说,(IMO)这种设计模式比Linq2Sql更适合EntityFramework,因为它在POCO方面提供了更多的通用性

    Linq2Sql无法将业务实体与持久层完全解耦。在上面的示例中,您将返回一个Person对象,该对象实际上是L2S设计器中的实体,因此UI需要对此进行引用,从而克服了“持久性忽略”的问题

    但是,正如我所说,单独创建存储库,不要将方法放在分部类中,而是在存储库中使用它们


    HTH.

    哇,回答得很好,RPM1984,我真的明白你的解释了。谢谢你的信息。是的,在我尝试学习LINQtoSQL之前,我已经学习了EF,并且从EF中我得到了我想要在LINQtoSQL中实现的存储库模式的想法。非常感谢不用担心@VinkyH,很高兴能帮忙!