Ash*_*kan 15 c# inheritance entity-framework ef-database-first
我正在尝试使用实体框架6.0和数据库第一种方法实现继承.好吧,假设我有一个像下面这样Person的Organization实体:
// a simplified version of organization entity
public class Organization
{
public Guid ID { get; set; }
public string Nickname { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string OfficialName { get; set; }
public Guid CEOID { get; set; }
public DateTime? RegisterDate { get; set; }
}
// a simplified version of person entity
public class Person
{
public Guid ID { get; set; }
public string Nickname { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public Guid PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public string NationalCode { get; set; }
public DateTime? BirthDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以在数据库中创建这两个表,但我想用继承,以便它在重复两个领域Person,并Organization可能在另一个基类象下面这样:
public class Identity
{
// These fields are the common fields between Person and Organization
public Guid ID { get; set; }
public string Nickname { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何在db-first方法中实现这一目标?
Ash*_*kan 22
一种可能的方法是为每种类型使用一个表,称为TPT(table-per-type),我更喜欢使用它.为此,您可以像下图所示的模型一样定义表:

请注意,子实体与基本实体之间的关系在其pk列上是一对一的,并且所有公共字段都将移动到基表.创建表格后,右键单击visual studio中的模型页面,然后选择"从数据库更新模型...",然后在"添加"选项卡中,选择要添加的这3个表.首先你应该看到这个模型图,需要稍微改变一下:

做这些步骤Person,并Organization分别:
IdentityIdentity完成这些步骤后保存模型.现在您的模型应如下所示:

现在编译你的项目,享受你的生活!
其他资源:
实体框架设计器TPH继承