Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 财产';菜号';不能用作实体上的键属性_C#_Entity Framework_Ef Fluent Api - Fatal编程技术网

C# 财产';菜号';不能用作实体上的键属性

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

我正在尝试使用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 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类实例。