【发布时间】:2017-04-22 14:39:06
【问题描述】:
我有一个名为 MyEntity 的类
public class MyEntity
{
public int Id { get; set; }
[Required]
[StringLength(300)]
public string Name { get; set; }
}
还有一个继承类 HubEntity
public class HubEntity : Entity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int EntityId { get; set; }
[Required]
[StringLength(300)]
public string RootName { get; set; }
}
这是基于数据库中现有的表。每个班级都有一张桌子。因此HubEntity 表中的EntityId 字段引用Entity 表中的Id 字段。
为了避免破坏现有数据库,我在一个空数据库上运行我的代码并让 EF 创建表:
我担心的是 HubEntity 表是由 Id 和 EntityId 字段构建的,ID 字段被设计为 Entity 表的外键。我不知道如何获取 EntityId 字段作为外键。
我尝试将其标记为 [ForeignKey("Entity")],但随后出现异常:程序在 HubEntity 中查找指向实体的实体属性,这不是我想要的,因为它是遗产。
提前感谢您的帮助。
塞德里克
【问题讨论】:
-
你错误的继承和外键概念,它们不一样,另外,这不是代码优先:这些是部分类,所以它是数据库优先...
-
嗯……貌似是db优先,partial classes不代表table,只是一个ADD up,是你需要改的model
-
毫无疑问:我首先创建了数据库并在其上构建了我的应用程序的第一个版本,首先使用数据库。在这个版本中,模型基于两张表实现了Entity->HubEntity的继承。由于某些原因,我决定首先使用我不太熟悉的代码从头开始重建应用程序。我想实现每个类型的继承表,我唯一关心的是这个外键。我并没有将db端的外键概念和代码端的继承混为一谈,但我知道使用TPT,代码中的继承是通过表中的外键实现的。
-
部分类来自visual studio在现有db上实现code-first时逆向工程生成的代码。
-
您不能仅使用部分类构建数据库优先方法,您的模型是什么样的?喜欢这个人:stackoverflow.com/questions/40937111/data-displaying-null-types/… 看看他的 db 第一个模型...
标签: entity-framework inheritance ef-code-first foreign-keys