2013-02-20 36 views
0

我有以下的模型類如何防止EntityFramework生成多個外鍵關係?

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代碼優先約定應生成表

菜單項

隨着MenuItemId作爲主鍵和MenuId作爲Foregin項,但是因爲某些東西EF不斷生成重複的外鍵(準確的說是額外4),因此MenuId像MenuId1,2,3,4。

是因爲我有MenuItems的ICollection

我不明白爲什麼這應該是一個問題。

回答

1

您當前的設置將與MenuItem表創建四種不同的關係。如何更改模型以便Menu有一個ICollection<MenuItem> MenuItems的集合。這將包含全部MenuItem s,全部爲MenuType s。

然後,您可以創建BreakfastMenuItems,LunchMenuItems等的屬性,根據MenuType屬性在MenuItems上進行過濾。或者,也可以創建一個函數Menu.GetMenuItemsByType(MenuType menuType),它將返回所需的結果。

+0

肯定會給它一個去!但無論如何,我可以覆蓋這種行爲。我嘗試使用數據註釋和EF Fluent API顯式關聯FK,但沒有運氣 – 2013-02-20 13:19:48

0

是的,這是因爲你的菜單類中的集合發生。從您的模型EF推斷,一個菜單項可以屬於菜單中的BreakFast,Lunch,Snacks,Dinner列表。任何菜單項都可以在全部/部分/全部都沒有。所以這是它產生的最直接的設計。

但是,代碼的第一點是......先編碼。一旦你確定了你的模型,那麼你總是可以做一些小的改變。