c# - 使用其关系中的属性为子类建模的正确方法

标签 c# entity-framework oop solid-principles

我有一个 Lawsuit 类,它有一个 Employer 列表。要求必须将列表中的雇主之一设置为主要雇主。我想到了两种方法来满足这个业务规则。

解决方案一

这是我当前的实现,我有一个 MainEmployer 并且我在此属性和 Employers 列表中存储相同的实体:

public class Lawsuit()
{
    public int Id { get; set; }

    public virtual Employer MainEmployer { get; set; }
    public virtual ICollection<Employer> Employers { get; set; }
}

方案二

我还可以创建一个中间类 EmployerLawsuit,它带有一个名为 Mainbool 属性:

public class LawsuitEmployer()
{
    public int Id { get; set; }
    public bool Main { get; set; }

    public virtual Employer Employer { get; set; }
    public virtual Lawsuit Lawsuit { get; set; }
}

public class Lawsuit()
{
    public int Id { get; set; }

    public virtual ICollection<EmployerLawsuit> Employers { get; set; }
}

考虑到生成的数据库的性能(我使用的是 Entity Framework )和 SOLID 的原则,这两种方法中哪一种更好?或者是否有更好的方法来为这些实体建模?

最佳答案

我会坚持使用#1 方法。它只是 LawsuitEmployer 之间的一对多/多对一关联。也就是说,当检索 Lawsuit 持久对象时,将作为 SQL 连接 的一部分检索所谓的关联,此外,您不需要查询所有雇主检查哪个是主要雇主

就面向对象编程而言,#1 听起来更好,并且当使用 O/RM 映射到关系数据库或 NoSQL 数据库时,域的性能会更好。

关于#2

实际上,#2 听起来更像是以关系方式设计域。这将是一个设计为可查询的域,而面向对象编程产生层次模型,这是用关联而不是使用标志或标识符来表达域的主要原因定义域实体的关系。

您不需要标志来将实体标记为主要雇主并为此实现层次结构。保持简单:设置整个 MainEmployer 关联并开始!

关于c# - 使用其关系中的属性为子类建模的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637505/

相关文章:

c# - 寻找如何重构我的算法的想法

c# - 在非 ASP.Net 应用程序中加密连接字符串

c# - 为什么 html.dropdownlist 将第一个属性选项设置为选中?

c# - 取消 DataAdapter.Fill()

C# 将 OrderDate 与变量进行比较

php - 在 PHP OOP 中处理数据库访问的正确方法

java - 有什么方法可以在构造函数中初始化需要 "this"作为参数的对象吗?

c# - WCF 查询拦截器 : Is this MSDN sample a security risk?

c# - EF 6 Code First 对象生命周期/信号/事件

c++从类外部调用方法