微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 实体框架DB-First,实现继承

我试图使用实体框架6.0和数据库第一种方法实现继承.好的,假设我有个人和组织实体,如下所示:
// 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方法中实现这一点?

解决方法

一种可能的方法是使用一种称为TPT(每种类型表)的表,我喜欢使用它.要实现这一点,您可以像下图所示的模型来定义表:

请注意,子基础实体之间的关系在其pk列上是一对一的,所有常用字段都将移动到基表.创建表后,右键单击可视化工作室中的模型页面,然后从“数据库…”中选择“更新模型”,然后在“添加”选项卡中,选择要添加的3个表.起初你应该看到这个模型图,需要改变一下:

对人员和组织分别执行以下步骤:

>右键单击实体,然后选择“属性
>在Base Type属性中选择Identity
>选择然后删除此实体与身份之间的关联
>选择然后删除该实体的PK(ID列)(从基本实体继承)

这些步骤之后,保存您的模型.现在你的模型应该是这样的:

现在编译你的项目,享受你的生活!

附:我感谢任何人可以编辑我的答案并解释实体框架中的TPH(每层次分层)继承.

希望这可以帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐