如果你希望你的Customer类是一个没有LINQ附件的普通对象,那么你很可能需要编写一个mapper方法来将基于LINQ的Customer对象转换为你的普通Customer域对象。 LINQ to SQL没有内置的这种功能。
我已经开始将我的映射方法包装在扩展方法中以提高可读性,并且它确实有助于简化存储库代码。举例来说,一个例子CustomerRepository方法我的样子:
public static class ObjectMapper
{
public static Customer ToDomainObject(this Customer linqObject)
{
var domainObject = null
if (linqObject != null)
{
domainObject = new Customer
{
Id = linqObject.Id,
FirstName = linqObject.FirstName,
LastName = linqObject.LastName
}
}
return domainObject;
}
}
或类似的东西:
public Customer GetById(int id)
{
return dataContext.LINQCustomers.Where(c => c.Id == id)
.Single()
.ToDomainObject();
}
和ToDomainObject()方法是在类似的扩展方法定义。你也可以做同样的事情,将你的域对象转换回一个LINQ对象,并将其传回到你的资源库中进行持久化。
因此,如果Customer on ICustomerRepository是由Linq To SQL或SubSonic创建的,并且其类型可能不同? – Slee 2009-02-07 21:34:04
客户在您的ICustomerRepository中定义了哪里? – Slee 2009-02-07 21:35:17