该物业' Dish_ID'不能用作实体

时间:2015-11-05 22:31:15

标签: c# entity-framework ef-fluent-api

我尝试使用EntityFramework添加一些实体。 我需要和图像一样的模型 I need the same model as in image 我创建了两个类:

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期间,我收到错误消息:&#34;属性&#39; Dish_ID&#39;不能用作实体的关键属性&test; testFOef.PriceOfDish&#39;因为属性类型不是有效的键类型。只有标量类型,字符串和字节[]是受支持的键类型。&#34;。 但为什么?你能解释一下吗?谢谢你的帮助

2 个答案:

答案 0 :(得分:5)

就像错误一样,您使用List<Dish>作为主键的类型。您必须像往常一样使用标量类型(值类型)或byte []。

对您而言,解决方案是创建一个Dish_ID类型的int

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; }

}

答案 1 :(得分:2)

您正在尝试将List<Dish> Dish_ID设置为表格的键。 但这不受支持。它也没有多大意义。 Dish个列表中只有一个Price?我想你想把int Dish_ID放在那里