实体框架一对多的自引用关系

本文关键字:自引用 关系 一对多 框架 实体 | 更新日期: 2024-07-27 08:39:26

这是我的应用程序模型:

public class Email
{
    public int Id {get; set;}
    public string Content {get; set;}
    public string Address {get; set;}
}

我想添加回复电子邮件的选项(电子邮件链-回复),它应该是这样的吗?:

public class Email
{
    public int Id {get; set;}
    public string Content {get; set;}
    public string Address {get; set;}
    public int? PreviousEmailId {get; set;}
    public virtual Email PreviousEmail {get; set;}
    public virtual List<Email> Responses {get; set;}
}

响应电子邮件可以是对另一封电子邮件的响应,等等。就像电子邮件应用程序一样

我想有可能收到一封电子邮件,并将它所指的所有电子邮件作为一个链显示给我的客户。就像在真实的电子邮件应用程序中一样,当删除电子邮件时,所有的链也应该被删除。

有人能告诉我应该如何定义模型吗(我首先使用的是EF6代码)。我应该如何定义关系?最佳实践是什么?

我希望它足够清楚,它的概念类似于其他电子邮件应用程序的工作方式。

谢谢!

实体框架一对多的自引用关系

您可以通过两种方法来解决此问题

第一个解决方案:与您提出的将递归关系称为"自关系"的方法相同,在您的情况下存储对父电子邮件"上一封电子邮件"的可选引用,如下所示:

public class Email
{
     public int Id {get; set;}
     public int? PrevousEmailId {get; set;}
     // other properties
     public virtual Email PreviousEmail{get;set;}
}

第二种解决方案:将关系存储在一个单独的表中,该表将允许您同时响应许多收件人,例如,它是递归关系或图形关系的通用解决方案,如下所示:

public class Email
{
     public int Id {get; set;}
     // other properties
}
public class EmailResponse
{
     public int EmailId {get; set;}
     public int PreviousEmailId {get; set;}
     public virtual Email Email {get; set;}
     public virtual Email PreviousEmail {get; set;}
}

我希望这将帮助你