NET .Core MVC и EF, два DbDataContexts, первый как одиночный, второй создается по требованию - PullRequest
0 голосов
/ 16 апреля 2020

Я создал веб-приложение MVC. NET Ядро с Angular и авторизацией по шаблону. ApplicationDbContext создается и добавляется как Singleton. Но в моем приложении у меня есть шаблон UnitOfWork, в котором я создаю свой второй AppDbContext по требованию:

public class UnitOfWorkFactory : IUnitOfWorkFactory
{
        private IMyAppDbContext dbContext;
        public IConfiguration Configuration { get; }

        public UnitOfWorkFactory(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IUnitOfWork CreateUnitOfWork()
        {
            DbContextOptionsBuilder options = new DbContextOptionsBuilder();
            OperationalStoreOptions storeOptions = new OperationalStoreOptions();
            IOptions<OperationalStoreOptions> operationalStoreOptions = Options.Create(storeOptions);
            dbContext = new MyAppDbContext(options.UseSqlServer(Configuration.GetConnectionString("AppConnection")).Options, operationalStoreOptions);

            var unitOfWork = new UnitOfWork(dbContext);
            return unitOfWork;
        }
    }

Хорошо, что у меня есть два DbContexts? Первый зарегистрирован в Startup.cs:

 services.AddDbContext<AppDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("AppConnection")));

            services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
               .AddEntityFrameworkStores<AppDbContext>();

            services.AddIdentityServer()
                .AddApiAuthorization<ApplicationUser, AppDbContext>();

AppDbContext имеет сущность (сгенерированную из шаблона, потому что я выбрал с авторизацией):

  public class ApplicationUser : IdentityUser
  {
  }

Другие таблицы, которые у меня есть во втором context: MyAppDbContext и ApplicationUser Мне тоже нужно иметь в этом контексте, потому что у меня есть отношения с другими таблицами. Таким образом, ApplicationUser привязан к двум контекстам. Это решение правильно?

...