Я хочу сделать несколько отчетов на веб-сайте ASP.NET Core, который считывает данные из нескольких баз данных, используя одну и ту же схему.
В Startup.cs
Мне нужно что-то вроде:
public void ConfigureServices(IServiceCollection services)
{
// Some other stuff here.
services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FirstConnectionString")));
services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SecondConnectionString")));
}
Но теперь DbContext относится к тому же типу и не имеет имени, так как мне выбрать тот, который я хочу использовать в контроллере?
public class HomeController : Controller
{
private readonly MyContext context;
public HomeController(MyContext context)
{
// Is that the one with FirstConnectionString or SecondConnectionString?
// How do I choose?
this.context = context;
}
}
EDIT:
Я, вероятно, что-то упускаю, но в MyContext
У меня есть:
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options) : base(options)
{
}
// Some more code here.
}
Тогда в MyContext1
У меня есть:
public class MyContext1 : MyContext
{
// base in now MyContext and not DbContext !!!
// Error with: public MyContext1(DbContextOptions<MyContext1> options) : base(options)
public MyContext1(DbContextOptions<MyContext> options) : base(options)
{
}
}
Если я добавляю 2 производных типа при запуске и запускаю, он вылетает и выдает следующее сообщение об ошибке:
InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[MyContext]' while attempting to activate 'MyContext1'.
Если я также добавлю базовый тип при запуске (то есть 3 типа с 3 различными строками подключения), тогда все 3 типа будут использовать строку подключения базового типа.