如何防止EntityFramework生成多个外键关系?

时间:2013-02-20 13:11:26

标签: c# entity-framework ef-code-first

我有以下模型类

public class MenuItem
{
    public int MenuItemId { get; set; }
    public int MenuId { get; set; }
    public Menu Menu { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
    public MenuType MenuType { get; set; }
}

public class Menu 
{
    public int MenuId { get; set; }
    public DateTime Date { get; set; }
    public ICollection<MenuItem> BreakFast { get; set; }
    public ICollection<MenuItem> Lunch { get; set; }
    public ICollection<MenuItem> Snacks { get; set; }
    public ICollection<MenuItem> Dinner { get; set; }
}

现在我的理解是,根据EF Code First惯例,它应该生成表

菜单项

MenuItemId 作为主键,将 MenuId 作为Foregin键,但因为EF不断为 MenuId生成重复的外键(准确地说是额外的4个) ,如MenuId1,2,3,4。

是不是因为我有ICollection的MenuItems?

我不明白为什么这应该是一个问题。

2 个答案:

答案 0 :(得分:1)

您当前的设置将为MenuItem表创建四种不同的关系。如何更改模型,以便Menu有一个ICollection<MenuItem> MenuItems集合。这将包含所有MenuItem的所有MenuType s。

然后,您可以为BreakfastMenuItemsLunchMenuItems等创建属性,并根据MenuItems属性在MenuType上进行过滤。或者,创建一个函数Menu.GetMenuItemsByType(MenuType menuType),它将返回您想要的结果。

答案 1 :(得分:0)

是的,因为菜单类中的集合正在发生这种情况。从您的模型EF推断,一个菜单项可以属于菜单中的BreakFast,Lunch,Snacks,Dinner list。任何菜单项都可以是全部/部分/全部。所以这是它产生的最简单的设计。

然而,代码的第一点是......先编码。一旦你计算出你的模型,你总是可以做一些小改动。