实体框架一对多的自引用关系
本文关键字:自引用 关系 一对多 框架 实体 | 更新日期: 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;}
}
我希望这将帮助你