首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架DDD

实体框架DDD
EN

Stack Overflow用户
提问于 2018-05-14 22:57:23
回答 1查看 160关注 0票数 1

我在WPF应用程序的EF核心项目上工作。我们决定将DbContext拆分成两个较小的部分:(该项目包含一个数据库)

代码语言:javascript
复制
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 )来维护和迁移数据库

代码语言:javascript
复制
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()...那现在呢?我们一定要写这样的东西吗:

代码语言:javascript
复制
if(option1)
{
    FirstDbContext.Parameters.First()
}else
{
    SecondDbContext.Parameters.First() 
}

这对存储库有什么影响?因为如果我们保持这种方法,我们必须在两个存储库中复制代码:-(?

EN

回答 1

Stack Overflow用户

发布于 2018-05-15 03:00:33

不不..。忘记你提到的方法,你最终会写出两倍于你所需的代码。为什么不直接使用db上下文类型:

在函数的开头,只有一个if else

代码语言:javascript
复制
DbContext context;

if(option1)
{
    context = new firstContextEntities();
}
else
{
    context = new secondContextEntities();
}

由于两个上下文几乎完全相同,您将通过将其转换为更大的上下文(具有最多访问权限的上下文)来使用您的上下文:

代码语言:javascript
复制
var FirstLine = ((secondContextEntities)context).Parameters.First();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50333398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档