2015-11-05 77 views
1

我試圖添加一些使用EntityFramework的實體。 我需要同樣的模型作爲圖像 I need the same model as in image 我創建了兩個類:屬性'Dish_ID'不能用作實體上的關鍵屬性

public class PriceOfDish 
{ 
    [Key] 
    public virtual List<Dish> Dish_ID { get; set; } 
    [Key] 
    public DateTime DateTime { get; set; } 

    public decimal Price { get; set; } 
} 
public class Dish 
{ 
    [Key] 
    public int Dish_ID { get; set; } 
    public string DishName { get; set; } 
    public string Description { get; set; } 
    public virtual FoodCategory FoodCategory_ID { get; set; } 
    public virtual Feature Feature_ID { get; set; } 

    public virtual ICollection<OrderedDishes> Orders { get; set; } 

} 

使用FluentAPI試圖設置主鍵:

builder.Entity<PriceOfDish>() 
      .HasKey(t => new {t.Dish_ID, t.DateTime}); 

在更新DB我得到錯誤信息:「該物業'Dish_ID'不能用作實體'testFOef.PriceOfDish'的關鍵屬性,因爲屬性類型不是有效的鍵類型,只有標量類型,字符串和字節[]是支持的鍵類型。「 但是爲什麼?你能解釋一下嗎?感謝您的任何幫助

+0

注意到錯誤提到'PriceOfDish'類,而不是'Dish'類。您不能簡單地使用列表作爲ID。您必須爲該場景尋找「複合鍵」。 –

回答

4

就像錯誤說你正在使用List<Dish>作爲你的主鍵的類型。您必須照常使用標量類型(值類型)或byte []。

對於您來說,解決方案是創建一個具有int類型的proprerty Dish_ID

public class PriceOfDish 
{ 
    [Key] 
    public int Dish_ID { get; set; } 

    [Key] 
    public DateTime DateTime { get; set; } 

    [ForeignKey("Dish_Id")] 
    public virtual Dish Dish { get; set; } 

    public decimal Price { get; set; } 

}

+0

但EF如何從「Dish」表中找到此屬性? – Eluvium

+1

它會按慣例找到它。它將查找名稱爲DishId或Dish_ID的proprerty。 – CodeNotFound

+0

這真的可以工作,但是用鍵創建的實體並且沒有與「Dish」表的連接。我很抱歉這個簡單的問題和我的英語不好 – Eluvium

1

你想設置一個List<Dish> Dish_ID作爲表的鍵。 但是這不被支持。它也沒有多大意義。名單Dish es將有一個單一的Price?我想你想把int Dish_ID那裏