【发布时间】:2018-05-14 14:57:22
【问题描述】:
我从事 WPF 应用程序的 EF Core 项目。 我们决定将 DbContext 拆分为 2 个较小的部分:(该项目包含一个数据库)
public class FirstDbContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public DBSet<Parameters>{ get; set; }
}
public class SecondDbContext: DbContext
{
public DBSet<User>{ get; set; }
public DBSet<Books> { get; set; }
public DBSet<Parameters>{ get; set; }
}
我们保留一个“超级” DbContext(其中包含数据库中的所有 DbSet)来维护和迁移数据库
public class SuperDbContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public DBSet<User>{ get; set; }
public DBSet<Books> { get; set; }
public DBSet<Parameters>{ get; set; }
}....
重构代码的第一步是将引用“SuperDbContext...”的行替换为正确的调用“SecondDbContext.Books...”或“FirstDbContext.Post”...OK
问题: 在客户端应用中,DbContext 的选择取决于用户在应用启动时的选择:如果用户选择 option1 => FirstDbContext,如果 option2 => SecondDbContext。
我们如何编写代码来打开当前 DbContext 以管理“通用 DbSet”(参数):在重构之前,我们有例如: SuperDbContext.Parameters.FirstOrDefault()... 现在 ?我们必须写这样的东西吗:
if(option1)
{
FirstDbContext.Parameters.First()
}else
{
SecondDbContext.Parameters.First()
}
对存储库有什么影响?因为如果我们保持这种方法,我们必须在 2 个存储库中复制代码 :-( ?
【问题讨论】:
标签: entity-framework domain-driven-design bounded-contexts