Entity framework代码首先使用导航属性一个Key

Entity framework code first using navigation properties a Key

我的 Entity framework Code First 上下文中有以下 class

public class DataBinding
{
    [Key]
    public DataSource Source
    { get; set; }

    [Key]
    public DataType Type
    { get; set; }
    .....
}

DataSourceDataType 都是同一上下文的一部分,但是当我尝试创建数据库时出现以下错误 EntityType 'DataBinding' has no key defined. Define the key for this EntityType. DataBindings: EntityType: EntitySet 'DataBindings' is based on type 'DataBinding' that has no keys defined. 我已经定义了两个键为什么我收到此错误?

重写总数:

如果我理解得很好,您想实现一个具有复合键的实体作为同一上下文中其他实体的外键。 您不能直接 link 实体,但可以 link 这个实体的主键,如下例所示。

composite key from foreign keys

在这种情况下,您必须像前面的示例一样,在要在 class 上引入的(简单类型)中显式写入实体的主键,然后添加导航 属性.

构建组合键时(无论如何),您必须对键进行排序。

问题是您使用两个复杂类型作为 PK,这是不允许的。 Key 成员只能是直接在实体中的标量属性。复杂类型表示为不支持的复杂 属性。 检查这个 discussion and this post.

要解决您的问题,您可以这样做:

public class DataSource
{
    public int Id { get; set; }
    //...
}

public class DataType
{
    public int Id { get; set; }
    //...
}
public class DataBinding
{
    [Key,ForeignKey("Source"),Column(Order = 0)]
    public int DataSourceId {get;set;}
    [Key,ForeignKey("Type"),Column(Order = 1)]
    public int DataTypeId {get;set;}

   public DataSource Source { get; set; }

   public DataType Type { get; set; }
   //...
}