删除引用的实体时删除实体

时间:2014-06-26 10:38:50

标签: domain-driven-design entity-framework-6

使用DDD,我有4个聚合根,其中,使用预约类比,诊所可以有多个患者,每个患者可以有多个约会,每个约会可以有一些处方。

现在,为了避免在这种情况下创建一个非常大的集合,Clinic,我创建了4个单独的聚合根。

public class Clinic
{
    public Guid Id { get; private set; }
}

public class Patient
{
    public Guid Id { get; private set; }

    public Guid ClinicId { get; private set; }

    public Patient(Guid clinicId)
    {
        ClinicId = clinicId;
    }
}


public class Appointment
{
    public Guid Id { get; private set; }

    public Guid PatientId { get; private set; }

    public Appointment(Guid patientId)
    {
        PatientId = patientId;
    }
}

现在,问题是我应该如何管理删除患者的情况,在这种情况下,应该删除引用该患者的所有约会。

1 个答案:

答案 0 :(得分:2)

我想这是领域专家会派上用场的地方。从技术角度来看,它可能取决于您决定的架构。

100%一致性

在这里,您可以使用应用程序服务首先删除患者,然后删​​除与该患者相关的所有约会。

最终一致性

使用消息传递,您可以发布将被删除约会的某个端点响应的PatientDeletedEvent

<强>然而

您可能不希望首先删除患者。即便如此,您对约会(例如设置患者Inactive)的约定的问题仍可能导致您想要删除未来的约会。

这是您需要领域专家指导您创建正确的模型和行为的地方。