我正在尝试使用实体框架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; }
}
我可以在数据库中创建这两个表,但我想使用继承,因此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; }
}
如何在db-first方法中实现这一目标?
答案 0 :(得分:21)
一种可能的方法是对每种类型使用一个表,称为 TPT (每个类型的表),我更喜欢使用。为此,您可以像下图所示的模型一样定义表格:
请注意,子实体和基本实体之间的关系在其pk列上一对一,并且所有公共字段都移动到基表。创建表格后,右键单击visual studio中的模型页面,然后选择从数据库更新模型... ,然后在添加选项卡中,选择要添加的这3个表格。首先你应该看到这个模型图,需要稍微改变一下:
分别为Person
和Organization
执行以下步骤:
Identity
Identity
完成这些步骤后保存模型。现在您的模型应如下所示:
现在编译你的项目,享受你的生活!