2012-05-05 7 views
0

いくつかのクラスからデータベースを生成するためにEntity Framework 4.3を使用しています。私は、Dealsのコレクションを持っているItemクラスを持っています。これは、無料でも割引でもかまいません。私のクラスはそうのようにモデル化されていますJSONとしての派生クラスの使用

その後
public class Item 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
    //Other properties 
    public virtual ICollection<Deal> Deals { get; set; } 
} 

public abstract class Deal 
{   
    //These properties are shared between various Deals 
    public int Id { get; set; } 
    public bool Monday { get; set; } 
    public bool Tuesday { get; set; } 
    public bool Wednesday { get; set; } 
    public bool Thursday { get; set; } 
    public bool Friday { get; set; } 
    public bool Saturday { get; set; } 
    public bool Sunday { get; set; } 
    public TimeSpan TimeFrom { get; set; } 
    public TimeSpan TimeTo { get; set; } 
    public int AgesFrom { get; set; } 
    public int AgesTo { get; set; } 
    public string Comments { get; set; } 
    public virtual ICollection<Vote> Votes { get; set; } 
} 
public class DiscountedDeal : Deal 
{ 
    public double PriceAfterDiscount { get; set; } 
} 
public class FreeDeal : Deal 
{ 
    //No properties needed here 
} 

に私のonModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<FreeDeal>().ToTable("FreeDeals"); 
     modelBuilder.Entity<DiscountedDeal>().ToTable("DiscountedDeals"); 
    } 

私はもともとそれが無料だったかどうブールフィールドを持つ単一Dealクラスを表すために持っていました。私が今持っているやり方は、もう少し正規化されているように見えますが、自然に物事が複雑になります。

フロントエンドでは、このデータを送信して取得するためにajax呼び出しを使用していますが、別々の取引をどのように扱うかはわかりません。 Itemを取得した場合、3 Dealsと表示されている場合、2 Freeと1 Discountedどうすれば対応できますか?私のアイテムクラスに2 CollectionsFreeの場合は1、Discountedの場合は1)が必要ですか? 1つのフラグを持つDealクラスを持っていることに戻りますか?

答えて

0

要件を知らなくても、お得意の商品と商品が同じレベルで表示されるようにモデルを変更し、さまざまな商品に簡単にお取引を適用することをおすすめします。あなたがwednesdaysのアイテムに15%の割引をしたければ、今のようにアイテムごとに個別の取引を作成する必要があります。

また、アイテムに複数の取引があるとすると、取引に価格が設定されていると悪い考えだと思います。そのため、取引の優先順位などを決定するロジックが必要です。正規化されたデータベースはあなたの後で、私はシングルディールクラスに戻ってDealTypesテーブルが作成されるように別のクラスになるDealTypeを与えます。子クラスを保持し、それらに与えることができる価格を保持するのではなく、アイテム価格にその取引を適用するApplyDealメソッドを保持することができます。

関連する問題