所以我有2个不同的DbContext(首先是ef 6.1.3代码)
每个上下文都包含一个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数据库:
我正在使用依赖注入来添加作用域存储库和上下文,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>();
}
}
任何与重命名表不同的建议都将受到赞赏
由于