如何防止EntityFramework生成多个外键关系
本文关键字:关系 何防止 EntityFramework | 更新日期: 2023-09-27 18:00:19
我有以下模型类
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作为主键,将MenuIdenuId成重复的外键(确切地说是额外的4个),如MenuId1,2,3,4。
是因为我有MenuItems的ICollection
吗?
我不明白为什么这会成为一个问题。
您当前的设置将创建与MenuItem
表的四种不同关系。改变你的型号,使Menu
有一个ICollection<MenuItem> MenuItems
的集合怎么样。这将包含所有MenuItem
s,对于所有MenuType
s。
然后,您可以为BreakfastMenuItems
、LunchMenuItems
等创建属性,根据MenuType
属性对MenuItems
进行筛选。或者,创建一个函数Menu.GetMenuItemsByType(MenuType menuType)
,返回所需的结果。
是的,这是因为菜单类中的集合。根据您的模型EF推断,一个菜单项可以属于菜单中的BreakFast、Lunch、Snacks、Dinner列表。任何菜单项都可以在全部/部分/无菜单项中。因此,这是它生成的最直接的设计。
然而,编码优先的意义在于…编码优先。一旦你弄清楚了你的模型,那么你总是可以做一些小的改变。