У меня есть сценарий, в котором у меня есть несколько строк подключения, определенных в appsettings.json, например:
"ConnectionString": {
"ConnectionZone1": "Server=(localdb)\\mssqllocaldb;Database=Blogging;Trusted_Connection=True;",
"ConnectionZone2": "Server=localhost;Database=Blogging;Trusted_Connection=True;"
},
Это я также зарегистрировал в своем файле startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DbContextZone1>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ConnectionZone1")));
services.AddDbContext<DbContextZone2>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ConnectionZone2")));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Я создал модель и классы контекста, используя первый подход к базе данных, и зарегистрировал мои классы контекста следующим образом:
public partial class BloggingContext : DbContext
{
public BloggingContext()
{
}
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{
}
public virtual DbSet<Blog> Blog { get; set; }
public virtual DbSet<Post> Post { get; set; }
и создал два других класса контекста, которые наследуются от вышеуказанного основного базового класса:
public class DbContextZone1 : BloggingContext
{
public DbContextZone1()
{
}
}
public class DbContextZone2 : BloggingContext
{
public DbContextZone2()
{
}
}
Теперь я создал свои контроллеры API и пытаюсь вызвать эти методы контекста.
[HttpGet]
public async Task<ActionResult<IEnumerable<object>>> GetItems()
{
if (alternate)
{
alternate = false;
using (var context = new DbContextZone1())
{
return await context.Blog.ToListAsync();
}
}
using(var context = new DbContextZone2())
{
return await context.Post.ToListAsync();
}
}
Проблема заключается в том, что при запуске приложения выдается ошибка, что у моего класса контекста должен быть параметризованный конструктор вчтобы передать параметры.
Так что в конструкторе DbContextZone1 и DbContextZone2 какой параметр параметров контекста придет ?.Я попытался поставить как это, но он никогда не работает и выдает ошибку, когда я вызываю контроллер API:
public class DbContextZone1 : BloggingContext
{
public DbContextZone1(DbContextOptions<BloggingContext> options)
: base(options)
{
}
}
public class DbContextZone2 : BloggingContext
{
public DbContextZone2(DbContextOptions<BloggingContext> options)
: base(options)
{
}
}
И это ошибка:
ТакЛюбая помощь или идеи кода или предложения о том, как установить несколько соединений или сделать мой код правильным?.