我在WPF应用程序的EF核心项目上工作。我们决定将DbContext拆分成两个较小的部分:(该项目包含一个数据库)
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 (它包含数据库中的所有DbSets )来维护和迁移数据库
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"...好的
问:在客户端应用程序中,DbContext的选择取决于应用程序启动时用户的选择:如果用户选择option1 => FirstDbContext,如果选择option2 => SecondDbContext。
我们如何编写代码来打开当前的DbContext来管理“公共参数”(DbSet):在重构之前,我们有: SuperDbContext.Parameters.FirstOrDefault()...那现在呢?我们一定要写这样的东西吗:
if(option1)
{
FirstDbContext.Parameters.First()
}else
{
SecondDbContext.Parameters.First()
}这对存储库有什么影响?因为如果我们保持这种方法,我们必须在两个存储库中复制代码:-(?
发布于 2018-05-15 03:00:33
不不..。忘记你提到的方法,你最终会写出两倍于你所需的代码。为什么不直接使用db上下文类型:
在函数的开头,只有一个if else:
DbContext context;
if(option1)
{
context = new firstContextEntities();
}
else
{
context = new secondContextEntities();
}由于两个上下文几乎完全相同,您将通过将其转换为更大的上下文(具有最多访问权限的上下文)来使用您的上下文:
var FirstLine = ((secondContextEntities)context).Parameters.First();https://stackoverflow.com/questions/50333398
复制相似问题