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 调用来发送和检索这些数据,但我不确定如何处理单独的交易。如果我检索 anItem并且它有 3 Deals,比如 2Free和 1Discounted我该如何处理?我的项目类别中应该有 2 个Collections(1 个Free和 1 个)吗?Discounted我应该回到一个Deal有旗帜的班级吗?

4

1 回答 1

0

在不知道要求的情况下,我建议更改您的模型,以便交易和项目处于同一级别,您可以简单地将交易应用于不同的项目。就像现在一样,如果您想在星期三为商品提供 15% 的折扣,您将不得不为每件商品创建单独的交易。

另外,我认为如果您让一个项目有多个交易,那么在交易上设置价格是一个坏主意......这迫使您拥有确定交易优先顺序等的逻辑。如果保持数据库规范化是你在做什么我会回到单个交易类并给它一个 DealType 这将是另一个类,以便创建一个 DealTypes 表。然后,您可以保留子类,而不是让它们持有价格,您可以给它们和 ApplyDeal 方法,该方法会将交易应用于商品价格。

于 2012-05-05T00:45:24.263 回答