DDD 和 EF 代码优先迁移
DDD and EF Code-First Migrations
我最近看了 Steve Smith 和 Julie Lerman 在 Pluralsight 上的 Domain-Driven Design Fundamentals,这是一门很棒的课程,但是我有关于 EF Code-First 和 DDD 的问题吗?我明白了 rich 的概念实体并实际上理解了 DDD 的大部分内容,但我很难理解 DDD 中 EF Code-First 的使用。假设我有两个限界上下文,并且在每个限界上下文中都有一个 Customer 实体共享一个 Id 和 Name。
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,它使用自己的有界上下文 Customer实体定义如上)
我的问题和我很难理解的是如何处理跨不同 DbContext 的代码优先迁移。 Customer 实体引用相同的数据库 table 但仅公开与它们所在的限界上下文相关的那些属性。那么 EF 如何通过迁移处理这个问题?
您需要一个上下文,其中定义了客户的所有字段。此上下文将处理迁移。如果需要,您可以从限界上下文中隐藏此上下文。您必须使用
禁用限界上下文的迁移
Database.SetInitializer<AccountsContext>(null);
和
Database.SetInitializer<DelivieriesContext>(null);
Julie 的课程中一定有此信息,您可能错过了。
她的课程总结得很好。你会发现它在
this MSDN magazine article
当您使用多个上下文共享表时,您将无法使用自动迁移(我从不使用它们)。您可以生成所有迁移并在单个上下文中实施它(这是一项手动任务,但并不难)。
此外,我认为在某些情况下您可以评估存储库模式(使用多个存储库和单个上下文)。
我最近看了 Steve Smith 和 Julie Lerman 在 Pluralsight 上的 Domain-Driven Design Fundamentals,这是一门很棒的课程,但是我有关于 EF Code-First 和 DDD 的问题吗?我明白了 rich 的概念实体并实际上理解了 DDD 的大部分内容,但我很难理解 DDD 中 EF Code-First 的使用。假设我有两个限界上下文,并且在每个限界上下文中都有一个 Customer 实体共享一个 Id 和 Name。
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,它使用自己的有界上下文 Customer实体定义如上)
我的问题和我很难理解的是如何处理跨不同 DbContext 的代码优先迁移。 Customer 实体引用相同的数据库 table 但仅公开与它们所在的限界上下文相关的那些属性。那么 EF 如何通过迁移处理这个问题?
您需要一个上下文,其中定义了客户的所有字段。此上下文将处理迁移。如果需要,您可以从限界上下文中隐藏此上下文。您必须使用
禁用限界上下文的迁移Database.SetInitializer<AccountsContext>(null);
和
Database.SetInitializer<DelivieriesContext>(null);
Julie 的课程中一定有此信息,您可能错过了。
她的课程总结得很好。你会发现它在 this MSDN magazine article
当您使用多个上下文共享表时,您将无法使用自动迁移(我从不使用它们)。您可以生成所有迁移并在单个上下文中实施它(这是一项手动任务,但并不难)。
此外,我认为在某些情况下您可以评估存储库模式(使用多个存储库和单个上下文)。