【发布时间】:2009-01-20 11:22:03
【问题描述】:
我觉得我在兜圈子。对于使用LINQ to SQL 的正确存储库模式,我似乎无法下定决心。如果您熟悉Rob Conery'sMVC Storefront,您会看到他的实现用另一个类包装了LINQ 生成的模型,并将LINQ 生成的模型简单地视为data transfer object (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 datacontext
public IQueryable GetCusomters()
{
return
from c in _db.Customers
select new Customer // This is the wrapper class not the gen'd one
{
Id = c.Id,
Name = c.Name,
Addresses = new LazyList(c.Addresses)
};
}
与 Mike Hadlow 在他的 IRepository
应该在哪里执行和检查业务逻辑?这是在一个单独的层中,由存储库在保存/更新时一起调用,还是内置到包装器类中?
【问题讨论】:
标签: .net asp.net-mvc linq-to-sql repository-pattern