2009-05-28 15 views
0

LINQからSQLで生成されたオブジェクトにモデルクラスを移植する明確な方法を理解しようとしています。私の目標は、モデルとLinqModelsを分離しておくことです。LINQを使用したモデルの移植

public class Person { 
    public List<Account> Accounts {get; set;} 
} 
public class Account { 
    public List<Purchase> Purchases {get; set;} 
} 
public Purchase { 
    public String Whatever {get; set;} 
} 

ここでは、LINQ to SQLによって生成されるデータモデルもほぼ同じです。だから、私はDataContextの部分クラス内のgetterメソッドを追加するつもりだPersonオブジェクト移入する場合:私たちは、アプリケーションの残りの部分で、このPersonオブジェクトとその子の特性を取り込む方法

public Person GetPersonByID(int personID) { 
    .... 
} 

は以下のように行われているが次のようになります。

public Person GetPersonByID(int personID) { 
    Person res = 
     from p in Persons 
     select new Person() { 
      Accounts = (
       from a in p.Accounts 
       select new Account() { 
        Purchases = (
         from m in p.Purchases 
         select new Purchase() { 
          Whatever = m.Whatever 
         } 
        ).ToList() 
       } 
      ).ToList() 
     } 
    return res; 
} 

したがって、各子プロパティに対してクエリを拡張する必要があります。私はもっ​​とこのような何かやることができれば、私は本当に好む何を:

public Person GetPersonByID(int personID) { 
    return new Person(this.Persons.SingleOrDefault(p => p.ID == personID)); 
} 
.... 
public class Person { 
    public Person(DataModels.Person p) { 
     Accounts = (from a in p.Accounts select new Account(a)).ToList(); 
    } 
} 
public class Account { 
    public Account(DataModels.Account a) { 
     Purchases = (from r in a.Purchases select new Purchase(r)).ToList(); 
    } 
} 
public class Purchase { 
    public Purchase(DataModels.Purchase r) { 
     Whatever = r.Whatever 
    } 
} 

をこれは、はるかに管理されますが、初期GetPersonByIDコールが、私はこれらの子オブジェクトを移入するために必要なデータを返しません。これを回避する方法はありますか?

または、LINQ to SQLを使用してモデルオブジェクトを設定する方がよいでしょうか?

***私のコード例はかなり右でない場合は申し訳ありません*

答えて

0

「永続無知」あなたが探していると呼ばれています。

これは、特にDDD(Domain Driven Design)サークルのデザインにとって重要な特性です。

たとえば、LinqToSQLのXMLマッピング機能を使用すると、データクラスを生成せず、ドメインクラス(アカウント、購入など)をデータベースに直接マッピングする方法をLTSに指示できます。

マッピングオプション(特に価値オブジェクトの欠如、継承マッピングの制限、多対多リレーションシップサポートの欠如)に関してLinqToSQLの機能が制限されているため、あなたのケースでは機能しない場合があります。

LTSで生成されたクラスと上記のようなドメインクラスをお持ちの場合は、Automapperを調べることで、反復作業の一部を手助けすることができます。

関連する問題