我觉得我在圈子里跑来跑去.我似乎无法决定使用LINQ to SQL正确的存储库模式.如果您熟悉Rob Conery的 MVC店面,您将看到他的实现将LINQ生成的模型与另一个类包装在一起,并将LINQ生成的模型简单地视为数据传输对象(DTO).它看起来像这样:
//Custom wrapper class.
namespace Data
{
public class Customer
{
public int Id {get;set;}
public string Name {get;set;}
public IList<Address> Addresses {get;set;}
}
}
//Linq-Generated Class - severly abbreviated
namespace SqlRepository
{
public class Customer
{
public int Id {get;set;}
public string Name {get;set;}
public EntitySet<Address> {get;set;}
}
}
//Customer Repository
namespace SqlRepository
{
public class UserRepository : IUserRepository
{
private _db = new DB(); //This is the Linq-To-Sql …
Run Code Online (Sandbox Code Playgroud) 我喜欢LINQ to SQL,但似乎它生成的类与它们存储的数据库紧密耦合,这看起来像是一件坏事.
例如,使用旧的Northwind数据库,如果我使用Products表创建dbml,Product
则会生成一个类.我可以在任何其他层使用此类,这一切都很好,但如果我决定使用普通的旧ADO.NET(或交换机数据库),我将不得不重新创建Product
类,以及其他所有类"模型."
有没有解决的办法?或者单独创建对象模型,然后将表映射到它们?我已经玩过各种各样的地图类,但还没有找到满意的答案.