实体框架子类现在需要 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
如果没有在类型上定义键,EF 将按照约定推断该类型是复杂类型,就像它对 MyModelReference
所做的那样。
遗憾的是,您不能在复杂类型上建立关联/关系:
复杂类型不能参与关联。关联的两端都不能是复杂类型,因此无法在复杂类型上定义导航属性。
https://msdn.microsoft.com/en-us/library/vstudio/ee382831(v=vs.100).aspx