同一DBContext的多个实例

时间:2019-02-26 09:42:51

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

早上好

我一直在自己的一个项目中工作,我想知道是否有人知道我的应用程序中是否可以有同一个DBContext的多个实例。

我将有2个这样的数据库实例连接到 Startup.cs

services.AddDbContext<MyApplicationDBContext>(options => options.UseSqlServer(_config.GetConnectionString("StringConnection1")));
services.AddDbContext<MyApplicationDBContext>(options => options.UseSqlServer(_config.GetConnectionString("StringConnection2")));

services.AddScoped<IAppRepository, AppRepository>();

这就是我构建 MyApplicationDbContext 的方式:

public partial class MyApplicationDBContext : IdentityDbContext<AppUsers>
{
    public virtual DbSet<Book> Books{ get; set; }
    public virtual DbSet<Film> Films{ get; set; }

    public MyApplicationDBContext(DbContextOptions<MyApplicationDBContext> options) : base(options)
    {

    }
}

最后,我想在存储库中添加如下内容:

public class AppRepository: IAppRepository
{
    private IConfigurationRoot _config;
    private MyApplicationDBContext _cntx;
    private MyApplicationDBContext _cntx2;
    private UserManager<AppUsers> _userManager;

    public AppRepository(MyApplicationDbContext cntx, MyApplicationDbContext cntx2, IConfigurationRoot config, UserManager<AppUsers> userManager)
    {
        _cntx = cntx;
        _cntx2 = cntx2;
        _config = config;
        _userManager = userManager;
    }

    public async Task<IEnumerable<Book>> GetBookByDatabase(string book, int database)
    {
        if(database == 1)
           return _cntx.GetBook(book);
        if(database == 2)
           return _cntx2.GetBook(book);
        else
           return null;
    }
}

此代码的主要目的是拥有一个应用程序实例,该实例可以插入和查询来自2个不同数据库的数据。

这是我写过的第一篇文章,对不起,我写错了东西。

欣赏您的答案。

1 个答案:

答案 0 :(得分:0)

好吧,如果您的目标是拥有两个数据库,那么您要做的就是在两个连接字符串中指定不同的数据库名称。

但是,如果要点是按用户分开数据,那么我想说,将用户名存储在表的关键字段中要好得多。