EF 6.1.3多数据库(MSSQL)通用存储库“相同表名”

时间:2017-07-11 09:49:17

标签: c# entity-framework asp.net-core

所以我有2个不同的DbContext(首先是ef 6.1.3代码)

  • FirstDbContext
  • SecondDbContext

每个上下文都包含一个SbSet Users,用于映射相应数据库中的用户表 注意:数据不同,DbFirst用户不是DbSecond用户!!

我有一个抽象的存储库:

public abstract class Repository<TContext> where TContext : DbContext
{
    public Repository(TContext ctx)
    {
    }
}

和2个存储库:

public FirstRepo : Repository<FirstDbContext>
{
    public FirstRepo(FirstDbContext ctx):base(ctx)
    {
    }
}

public SecondRepo : Repository<SecondDbContext>
{
    public SecondRepo(SecondDbContext ctx):base(ctx)
    {
    }
}

我有两个与上下文相关的不同MSSQL数据库:

  • DbFirst
  • DbSecond

我正在使用依赖注入来添加作用域存储库和上下文,2个数据库,2个不同的连接。

我希望我的.Net Core应用程序可以使用2个模型 但是一旦我从上下文中获取数据,我就得到

  

NotSupportedException:类型'First.User'和类型   'Second.User'都有相同的简单名称   “用户”等不能在同一型号中使用。

为什么是同一型号?

我知道在同一模型中我应该有不同的名称,因为EF不会查找名称空间,但在这种情况下我不应该有这种问题。

编辑#1: 如果我单独使用其中一个存储库,一切都按预期工作,所以我确信没有任何错误的命名空间 如果我一起使用存储库,我会收到此错误,例如

var top10 = FirstRepo.GetTop10().ToList();
var sam = SecondRepo.GetByName<Second.User>("sam");

编辑2(@Steve Green):

//Note that I'm not trying to do this : 
public class MyTextContext : DbContext
{
    public DbSet<Test.Security.Question> Security_Question { get; set; }
    public DbSet<Test.Forms.Question> Forms_Question { get; set; }
}


// What I need is something like this :
public class SecurityContext : DbContext
{
    public DbSet<Test.Security.Question> Question { get; set; }
}
public class FormsContext : DbContext
{
    public DbSet<Test.Forms.Question> Question { get; set; }
}

重要提示 如果我手动忽略两个上下文中的“其他”实体,一切正常 我注意到上下文不仅在不同的命名空间中,而且在不同的程序集中......

// this is working!! .___.
// but i don't want to add a reference to a project just to exclude a class... it's unacceptable 
public class FirstDbContext : DbContext 
{
    public DbSet<First.User> Users {get;set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Ignore<Second.User>();
    }
}

public class SecondDbContext : DbContext 
{
    public DbSet<Second.User> Users {get;set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Ignore<First.Usere>();
    }
}

任何与重命名表不同的建议都将受到赞赏

由于

0 个答案:

没有答案