C# 财产';菜号';不能用作实体上的键属性
我正在尝试使用EntityFramework添加一些实体。 我需要与图中相同的型号 我创建了两个类:C# 财产';菜号';不能用作实体上的键属性,c#,entity-framework,ef-fluent-api,C#,Entity Framework,Ef Fluent Api,我正在尝试使用EntityFramework添加一些实体。 我需要与图中相同的型号 我创建了两个类: public class PriceOfDish { [Key] public virtual List<Dish> Dish_ID { get; set; } [Key] public DateTime DateTime { get; set; } public decimal Price { get; set; } } public cl
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; }
}
PriceOfDish的公共类
{
[关键]
公共虚拟列表盘_ID{get;set;}
[关键]
公共日期时间日期时间{get;set;}
公共十进制价格{get;set;}
}
公家菜
{
[关键]
公共int盘_ID{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共虚拟FoodCategory FoodCategory_ID{get;set;}
公共虚拟要素_ID{get;set;}
公共虚拟ICollection订单{get;set;}
}
使用FluentAPI尝试设置主键:
builder.Entity<PriceOfDish>()
.HasKey(t => new {t.Dish_ID, t.DateTime});
builder.Entity()
.HasKey(t=>new{t.Dish_ID,t.DateTime});
更新DB期间,我收到错误消息:“属性'Dish_ID'不能用作实体'testFOef.PriceOfDish'的键属性,因为该属性类型不是有效的键类型。仅支持标量类型、字符串和字节[]。”。
但是为什么呢?你能给我解释一下吗?感谢您提供的任何帮助如出现错误,请说明您正在使用
列表
作为主键的类型。必须像往常一样使用标量类型(值类型)或字节[]
对于您来说,解决方案是使用int
类型创建一个适当的Dish\u 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; }
}如有错误,请说明您正在使用
列表作为主键的类型。必须像往常一样使用标量类型(值类型)或字节[]
对于您来说,解决方案是使用int
类型创建一个适当的Dish\u 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; }
}您试图将列表盘ID
设置为表的键。
但这是不受支持的。这也没什么意义。将有一个价格的盘的列表
E
?我想你应该把int Dish\u ID
放在那里你试图将列表Dish\u ID
设置为表的键。
但这是不受支持的。这也没什么意义。将有一个价格的盘的列表
E
?我想你应该把intdish\u ID
放在那里注意,错误提到的是PriceOfDish
类,而不是Dish
类。您不能简单地使用List作为id。您必须为场景查找复合键
。请注意,错误提到的是PriceOfDish
类,而不是Dish
类。您不能简单地将列表用作id。您必须为场景查找复合键
。但EF如何从“Dish”表中找到此属性?它将按惯例找到它。它将查找名为DishId或Dish_ID的proprerty。这确实有效,但实体是用键创建的,与“Dish”表没有连接。对于这个简单的问题和我糟糕的英语,我感到非常抱歉。我编辑了我的代码并向Dish集合添加了一个属性,该属性告诉EF使用哪个属性作为外键。有些错误,您不能在此类中使用集合,因为我们有一个Dish_Id属于Dish类实例。但是EF如何从“Dish”中找到此属性桌子?按惯例会找到的。它将查找名为DishId或Dish_ID的proprerty。这确实有效,但实体是用键创建的,与“Dish”表没有连接。对于这个简单的问题和我糟糕的英语,我感到非常抱歉。我编辑了我的代码并向Dish集合添加了一个属性,该属性告诉EF使用哪个属性作为外键。有些错误,您不能在此类中使用集合,因为我们有一个Dish_Id,属于Dish类实例。