实体框架子类,现在需要Id / Key?

时间:2015-06-15 20:24:22

标签: c# asp.net .net entity-framework entity-framework-6

我的实体框架模型中有一个子对象。像这样的东西

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

1 个答案:

答案 0 :(得分:0)

如果您没有在类型EF will infer by convention上定义键,则该类型是复杂类型,就像MyModelReference一样。

不幸的是,您无法在复杂类型上建立关联/关系:

  

复杂类型无法参与关联。关联的任何一端都不能是复杂类型,因此无法在复杂类型上定义导航属性。

https://msdn.microsoft.com/en-us/library/vstudio/ee382831(v=vs.100).aspx