Linq to sql 使用存储库模式的LINQ到SQL
目前,我正试图在我的项目中实现LINQ到SQL。我正在尝试使用LINQtoSQL和著名的存储库模式。以下是我想做的: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的部分类,并实现了我需要的所有函数 嗯,从这一步开始,我意识到我没
谢谢。存储库模式有很多变体。它的一个简单定义是封装/隐藏持久性逻辑的模块,不让其他组件看到 因此,您可以有一个名为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,很高兴能帮忙!