0

いくつかのクラスからデータベースを生成するために Entity Framework 4.3 を使用しています。無料または割引のコレクションを持つItemクラスがあります。Deals私のクラスは次のようにモデル化されています:

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 呼び出しを使用していますが、個別の取引をどのように扱うかはわかりません。を取得し、Item3 がある場合Deals、たとえば 2Freeと 1Discountedをどのように処理できますか? アイテム クラスに2 つCollections( 用に 1 つと 用Freeに 1つ) ある必要がありますか? フラグ付きのDiscounted1 つのクラスに戻す必要がありますか?Deal

4

1 に答える 1

0

要件を知らなくても、モデルを変更して、取引とアイテムが同じレベルに存在し、取引を別のアイテムに簡単に適用できるようにすることをお勧めします。今のように、水曜日にアイテムを 15% 割引したい場合は、アイテムごとに個別の取引を作成する必要があります。

また、アイテムに複数の取引を許可している場合、取引に価格を設定することは悪い考えだと思います...これにより、取引の優先順位などを決定するロジックが必要になります。あなたが求めているもの 単一の取引クラスに戻り、DealTypes テーブルが作成されるように別のクラスになる DealType を与えるだけです。次に、子クラスを保持し、それらに価格を保持させる代わりに、それらに与えることができる価格と、アイテム価格に取引を適用する ApplyDeal メソッドを保持できます。

于 2012-05-05T00:45:24.263 に答える