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

本文关键字:Id Key 框架 子类 实体 | 更新日期: 2023-09-27 17:56:17

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

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中它创建1个名为MyModel的表,其中我有以下列

编号

名字

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

我收到这样的错误

实体类型"模型引用"未定义键。定义此实体类型的键。模型引用:实体类型:实体集"模型引用"基于未定义键的类型"模型引用"。

当父类定义了 Id/Key 时,为什么必须向子类添加键? 我是否设置不正确?

我希望这个设置能给我一个包含以下列的表格

编号

名字

Reference_IsActive

Reference_Name

Reference_OtherModelId

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

如果没有在类型上定义键,EF 将按照约定推断该类型是复杂类型,就像它对 MyModelReference 所做的那样。

遗憾的是,您不能在复杂类型上建立关联/关系:

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

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