Entity framework DDD和EF代码优先迁移

Entity framework DDD和EF代码优先迁移,entity-framework,ef-code-first,domain-driven-design,Entity Framework,Ef Code First,Domain Driven Design,我最近观看了Steve Smith和Julie Lerman在Pluralsight上的节目,这是一门很棒的课程,但我是否有一个关于EF代码优先和DDD的问题,我了解了丰富实体的概念,并且实际上了解了DDD的大部分内容,但我正在努力理解EF代码优先在DDD中的使用。假设我有两个有界上下文,每个有界上下文中都有一个客户实体,共享一个Id和名称 namespace Accounts { public class Customer : Entity { public G

我最近观看了Steve Smith和Julie Lerman在Pluralsight上的节目,这是一门很棒的课程,但我是否有一个关于EF代码优先和DDD的问题,我了解了丰富实体的概念,并且实际上了解了DDD的大部分内容,但我正在努力理解EF代码优先在DDD中的使用。假设我有两个有界上下文,每个有界上下文中都有一个客户实体,共享一个Id和名称

namespace Accounts
{
    public class Customer : Entity
    {
        public Guid Id { get; private set; }
        public string Name { get; private set; }
        public string AccountNo { get; private set; }
    }
}

namespace Deliveries
{
    public class Customer : Entity
    {
        public Guid Id { get; private set; }
        public string Name { get; private set; }
        public Address DeliveryAddress { get; private set; }
    }
}
在每个有界上下文中,我都有一个带有DbContext的数据层,为了便于参数调用Accounts.AccountsDbContext和Deliveries.DeliveriesDbContext(每个都有一个IDbSet,它使用上面定义的自己的有界上下文客户实体)


我的问题和我正在努力理解的是如何处理跨不同DbContext的代码优先迁移。客户实体引用相同的数据库表,但只公开与它们所在的有界上下文相关的属性。那么EF如何通过迁移来处理这个问题呢?

您需要一个定义客户所有字段的上下文。此上下文将处理迁移。如果需要,可以从有界上下文中隐藏此上下文。必须使用禁用有界上下文的迁移

Database.SetInitializer<AccountsContext>(null);

Database.SetInitializer

当您使用多个上下文共享表时,您不能使用自动迁移(我根本不使用它们)。您可以生成所有迁移,并在单个上下文中实现它(这是一项手动任务,但并不难)


另外,我认为在某些情况下,您可以评估存储库模式(使用多个存储库和单个上下文)。

谢谢您的回答,我当然不记得在课程视频中提到过它,但我确实在代码示例中遗漏了这一点。看起来Julie和你的答案建议使用包含数据库所有内容的“uber”上下文,并使用手动迁移,这很好,因为我从来没有使用自动迁移,但是,也许只是我自己,但让这个神秘的“第三”上下文能够先实现代码似乎有些过分,但如果这是唯一的选择,那么我想这是有意义的。是的,乌伯语境是唯一的方式,我自己也不太喜欢它。
Database.SetInitializer<DelivieriesContext>(null);