我有以下模型类
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?
我不明白为什么这应该是一个问题。
答案 0 :(得分:1)
您当前的设置将为MenuItem
表创建四种不同的关系。如何更改模型,以便Menu
有一个ICollection<MenuItem> MenuItems
集合。这将包含所有MenuItem
的所有MenuType
s。
然后,您可以为BreakfastMenuItems
,LunchMenuItems
等创建属性,并根据MenuItems
属性在MenuType
上进行过滤。或者,创建一个函数Menu.GetMenuItemsByType(MenuType menuType)
,它将返回您想要的结果。
答案 1 :(得分:0)
是的,因为菜单类中的集合正在发生这种情况。从您的模型EF推断,一个菜单项可以属于菜单中的BreakFast,Lunch,Snacks,Dinner list。任何菜单项都可以是全部/部分/全部。所以这是它产生的最简单的设计。
然而,代码的第一点是......先编码。一旦你计算出你的模型,你总是可以做一些小改动。