Я создал веб-приложение 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
привязан к двум контекстам. Это решение правильно?