Несколько экземпляров одного и того же DBContext - PullRequest
0 голосов
/ 26 февраля 2019

Доброе утро,

Я работал над одним собственным проектом, и я бы знал, если кто-то знает, могу ли я иметь несколько экземпляров одного и того же DBContext в моем приложении.

Iбудет иметь 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 голосов
/ 27 февраля 2019

Что ж, если ваша цель состоит в том, чтобы иметь две базы данных, все, что вам нужно сделать, это указать разные имена баз данных в двух строках соединения.

Однако, если цель состоит в том, чтобы разделить данные по пользователю, то я бы сказал, что вам гораздо лучше просто сохранить имя пользователя в ключевом поле в таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...