如果你希望你的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