使用派生类作为JSON

时间:2012-05-05 00:08:21

标签: c# json asp.net-mvc-3 entity-framework

我正在使用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调用来发送和检索这些数据,但我不确定如何处理单独的交易。如果我检索Item并且它有3 Deals,比如2 Free和1 Discounted,我该如何处理?我的商品类中应该有2 CollectionsFree为1,Discounted为1)?我是否应该回到一个带有旗帜的Deal课程?

1 个答案:

答案 0 :(得分:0)

在不知道要求的情况下,我建议更改您的模型,以便交易和物品生活在同一级别,您只需将交易应用于不同的项目。因为现在你必须为每个项目创建一个单独的交易,如果你想在星期三给予物品15%的折扣。

此外,我认为如果你让一个项目有多个交易,那么对交易设定价格是一个坏主意......这会迫使你有逻辑来确定交易优先顺序等。如果保持数据库normailized是你所追求的我回到单一交易类,只是给它一个DealType,这将是另一个类,以便创建一个DealTypes表。然后,您可以保留子类,而不是让它们保持您可以给它们的价格,并将ApplyDeal方法应用于项目价格。