0

我有以下模型类

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作为外键,但由于某些原因,EF 不断为 MenuId 生成重复的外键(准确地说是额外的 4 个),例如MenuId1、2、3、4

是因为我有ICollectionMenuItems 吗?

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

4

2 回答 2

1

您当前的设置将创建与MenuItem表的四种不同关系。如何更改您的模型以便Menu拥有一个ICollection<MenuItem> MenuItems. 这将包含所有MenuItems,对于所有MenuTypes。

然后,您可以为BreakfastMenuItemsLunchMenuItems等创建属性,MenuItems基于该MenuType属性进行过滤。或者,创建一个Menu.GetMenuItemsByType(MenuType menuType)返回所需结果的函数。

于 2013-02-20T13:16:33.853 回答
0

是的,这是因为您的菜单类中的集合而发生的。从您的模型中,EF 推断出一个菜单项可以属于菜单中的早餐、午餐、小吃、晚餐列表。任何菜单项都可以是全部/部分/没有。所以这是它生成的最直接的设计。

然而,代码的重点是......首先编码。一旦你弄清楚你的模型,那么你总是可以做一些小的改变。

于 2013-02-20T14:42:28.430 回答