2011-08-26 19 views
0

アプリケーションでcollegionを管理するための特定のクラスを作成したいと考えています。EFでコレクションの特定のクラスを作成する方法は?

たとえば、私はStoreを持っていて、コレクションの顧客リストを持っています。このコレクションには、その月の顧客である顧客と、一部の顧客に対して賞を得ている顧客がいます理由。コードに移動しましょう:

public class Store { 
    public ICollection<Customer> Customers { get; set; } 

    public Customer CustomerOfTheMonth 
    { 
     //get and set for customer of the month 
    } 
    public ICollection<Customer> DiscountCustomers 
    { 
     //get and set for customer of the month 
    } 
    public ICollection<Customer> GetAllCustomers 
    { 
     //get and set for customer of the month 
    } 
} 

私のデータベースでは、私は2つのテーブルしか持っていません。ストア、および顧客。

私がしたいことは、顧客のために特定のコレクションを作成し、ストアからロジックを削除して特定のクラスに入れることです。結局のところ、そのロジックがどちらのクラスにも属していないと感じません。

私はこのようtomethingのWAN:

public class Store { 
    internal CustomerCollection Customers { get; set; } 

    //get and set for the propertis, just delegating for the collection 
}   

public class CustomerCollection { 
    public ICollection<Customer> Customers { get; set; } 

    public ICollection<Customer> DiscountCustomers 
    { 
     //get and set for customer of the month 
    } 

    //get and set with logic to filter the collection 
} 

は、このマッピングを作成し、データベースにのみ2つのテーブルを維持するためにそこに離れてますか?私はそれをアプリケーションに対して透過的にしたい。コードの問題で申し訳ありません、スタックオーバーフローで入力し、構文をチェックしませんでした。

答えて

2

モデルクラスにビジネスロジックを作成する必要はありません。ロジックを上位レベルに分けます。ここにあなたのモデルクラスがあります。それは、あなたが

public class Store { 
     public vertual ICollection<Customer> Customers { get; set; } 

     //get and set for other propertis 
    } 



public class Customer{ 

    //get and set for other propertis 
} 

は、特定のビジネス・ロジックを適用するリポジトリまたはサービスレイヤーを作成したいとあなたの関係を作成します

public ICollection<Customer> GetDiscountCustomers() 
    { 
     return dbContext.Customers.where(c=>c.discount=true).ToList() 
    } 

あなたが熱心なロードを使用することができ、一度に顧客と店舗をロードしたい場合は

public ICollection<Store> GetAllStores() 
     { 
      return dbContext.Stores.Include("Customers").ToList() 
     } 
+0

私がストアを読み込むと、顧客は一緒に読み込まれ、私はそれを分けたくありません。 – Migore

+0

それから熱心な読み込みを使うことができます。 –

関連する問題