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; }
.....
}
DataSource
和 DataType
都是同一上下文的一部分,但是当我尝试创建数据库时出现以下错误 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; }
//...
}
我的 Entity framework Code First 上下文中有以下 class
public class DataBinding
{
[Key]
public DataSource Source
{ get; set; }
[Key]
public DataType Type
{ get; set; }
.....
}
DataSource
和 DataType
都是同一上下文的一部分,但是当我尝试创建数据库时出现以下错误 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; }
//...
}