我的实体框架Code First上下文中有以下类
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.
我已经定义了两个键为什么我得到这个错误?
答案 0 :(得分:2)
问题是您使用两种复杂类型作为PK,这是不允许的。 Key
成员只能直接在实体中使用标量属性。复杂类型表示为不支持的复杂属性。
请检查此discussion和此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; }
//...
}
答案 1 :(得分:1)
完全重写:
如果我理解得很好,你想要在同一个上下文中实现具有基于外键的复合键的实体。 您无法直接链接实体,但可以按照示例链接此实体的主键。
composite key from foreign keys
在这种情况下,您必须明确地写出要在类中引入的(简单类型)中的外键实体的主键,如前面的示例所示,然后添加导航属性。
当您构建复合键(在任何情况下)时,您必须对键进行排序。