CustomerクラスをLINQにアタッチされていないプレーンオブジェクトにしたい場合は、ほとんどの場合、マッパーメソッドを記述してLINQベースのCustomerオブジェクトをプレーンなCustomerドメインオブジェクトに変換する必要があります。LINQ to SQLには、このような機能は組み込まれていません。
読みやすくするために、マッピングメソッドを拡張メソッドでラップし始めました。これは、リポジトリコードを単純に保つのに非常に役立ちます。たとえば、CustomerRepositoryメソッドの例は次のようになります。
public Customer GetById(int id)
{
return dataContext.LINQCustomers.Where(c => c.Id == id)
.Single()
.ToDomainObject();
}
ToDomainObject()メソッドは、次のような拡張メソッドで定義されます。
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;
}
}
または同様のもの。同じことを実行して、ドメインオブジェクトをLINQオブジェクトに変換し直し、永続化のためにリポジトリに戻すことができます。