我的实体框架模型中有一个子对象。像这样的东西
public MyModel() {
public long Id { get; set; }
public string Name { get; set; }
public MyModelReference Reference { get; set; }
}
public MyModelReference() {
public bool IsActive { get; set;}
public bool Name { get; set;}
}
这很好用,在SQL中创建了一个名为MyModel的表,在那里我有以下列
Id
姓名
Reference_IsActive
Reference_Name
这很好,因为在我的类中,我将MyModel放在MyModelReference类中,并且我可以通过访问MyModel中的Reference属性来访问这些属性。干净整洁。
现在我的库中有其他模型,我想在MyModel和MyOtherModel之间添加一个链接,但由于这个属性特别适用于Reference,我想将它添加到我的MyModelReference类中。所以我改变它也是这样的
public MyOtherModel() {
public long Id { get; set; }
public string Name { get; set; }
}
public MyModelReference() {
public bool IsActive { get; set;}
public bool Name { get; set;}
public long OtherModelId { get; set; }
public MyOtherModel OtherModel { get; set; }
}
现在由于某种原因,当我这样做并运行命令
-update-database
我得到一个像这样的错误
EntityType' ModelReference'没有定义键。定义此EntityType的键。 ModelReferences:EntityType:EntitySet' ModelReferences'基于类型' ModelReference'没有定义键。
为什么在父类定义了Id / Key时,我必须向子类添加一个键?我错误地设置了什么吗?
我希望这个设置能给我一个包含以下列的表
Id
姓名
Reference_IsActive
Reference_Name
Reference_OtherModelId
答案 0 :(得分:0)
如果您没有在类型EF will infer by convention上定义键,则该类型是复杂类型,就像MyModelReference
一样。
不幸的是,您无法在复杂类型上建立关联/关系:
复杂类型无法参与关联。关联的任何一端都不能是复杂类型,因此无法在复杂类型上定义导航属性。
https://msdn.microsoft.com/en-us/library/vstudio/ee382831(v=vs.100).aspx