【发布时间】:2021-12-02 17:17:21
【问题描述】:
我有一个 FinancialAccount 类,它可以链接到其他三个类,或者手动生成,所以我实现了一个枚举来保存它所链接到的类的类型,以及其他三个可以为空的 Guid 来保存该链接类的 Guid
public enum AccountClassificaiton
{
Normal,
Bank,
Contract,
Employee,
}
public Account()
{
...
public Guid Id { get; set; }
public string Name { get; set; }
public AccountClassificaiton AccountClassificaiton { get; set; }
public Guid? ContractId { get; set; }
public Guid? EmployeeId { get; set; }
public Guid? BankAccountId { get; set; }
...
}
考虑到我无法将这些 Guid 从此类中移出,并且此类与这三个类之间存在一对一的关系,并且这些 Guid 中只有一个应该具有值,因此我需要一种更好的方法来解决此问题取决于这个类有什么 AccountClassification
对不起,我的英语不是母语
编辑-1
我在同一个解决方案上使用 8 个项目的领域驱动设计模式,所以我很难在没有法律问题的情况下向您展示真正的问题
编辑-2
这个项目是财务管理系统的一部分,是一个庞大的ERP系统的一部分
【问题讨论】:
-
听起来你想在你的模型中使用inheritance,采用“每层表”的方法,使用
AccountClassification作为鉴别列。 -
有什么问题?如果它是约束,则在数据库中强制执行它。然而,这确实指向更大的架构设计气味......你真的需要指出实际问题是什么
-
(1) “我需要一个更好的方法来解决这个问题” 问题是什么?需要更好? (2)"考虑到我不能将这些Guids移出这个类"如果你不能把字段移出类,我看不出你能做什么。一些提议的 TPH 继承,但是这些字段将在同一个 table 中,但在不同的 classes 中(这将是基础)。
-
我没有看到任何问题,一切都很好。我唯一不会使用的是枚举。如果还不是很晚,请创建一个特殊的表来代替它。
-
我只是不喜欢拥有多个可为空的 guid 的想法,并且感谢每个提出 TPH(按层次结构表)方法的人,我不知道存在这样的东西,我对 C# 有点陌生- EF-core,所以我还在学习,由于我签署了 NDA,我无法透露整个代码,
标签: c# asp.net asp.net-core asp.net-web-api entity-framework-core