Переменный контекст в ASP.NET MVC (C#)C#

Место общения программистов C#
Anonymous
 Переменный контекст в ASP.NET MVC (C#)

Сообщение Anonymous »

В моем проекте ASP.NET MVC (написано в C#), я хочу использовать правильный DBContext в соответствии с некоторым значением из некоторых условий. Что DBContext должен быть доступен для всех методов контроллера. Для этого я использовал следующий подход:
сначала , я построил приложение со всеми необходимыми контекстами:

Код: Выделить всё

builder.Services.AddDbContext(options => options.UseMySql(conection1, ServerVersion.AutoDetect(conection1)));
builder.Services.AddDbContext(options => options.UseMySql(conection2, ServerVersion.AutoDetect(conection2)));
builder.Services.AddDbContext(options => options.UseMySql(conection3, ServerVersion.AutoDetect(conection3)));
....
second , Для каждого dbcontext добавлено в строитель, я создал соответствующий класс модели:

Код: Выделить всё

namespace Project.Models
{
public class Context1 : Context0
{
public Context1(DbContextOptions options): base(options)
{
}

public DbSet Table1 { get; set; }
public DbSet Table2 { get; set; }
// ....
}
}

namespace Project.Models
{
public class Context2 : Context0
{
public Context2(DbContextOptions options): base(options)
{
}

public DbSet Table1 { get; set; }
public DbSet Table2 { get; set; }
// ....
}
}
wate context0 имеет свой собственный класс модели:

Код: Выделить всё

namespace Project.Models
{
public class Context0 : DbContext
{
public Context0(DbContextOptions options): base(options)
{
}

public DbSet Table1 { get; set; }
public DbSet Table2 { get; set; }
// ....
}
}
Все модели имеют одинаковый набор dbsets .
третий , моя цель - использовать Context0 на моем контроллере после назначения правого введенного контекста:

Код: Выделить всё

namespace Project.Controllers
{
public class HomeController : Controller
{
private Context0 MainContext;
private readonly Context1 InjectedContext1;
private readonly Context2 InjectedContext2;
private readonly Context3 InjectedContext3;
// ....

public HomeController(Context1 context1,
Context2 context2,
Context3 context3,
....)
{
InjectedContext1 = context1;
InjectedContext2 = context2;
InjectedContext3 = context3;
// ....

if (some condition)
{
MainContext = InjectedContext2;
}
}
}
}
Проблема : когда я пытаюсь использовать MainContext на любом методе контроллера, я получаю ошибку:

system.argumentnullexception: 'значение не может быть нулевым. Строка: < /p>

Код: Выделить всё

Data1 = MainContext.Table1.ToList();
, где maincontext null.
Однако (это важно):
< br/> [*] #1 : incededContext2 правильно назначен для MainContext (я вижу это во время выполнения)

[*] #2 : инъекционное управление 2 правильно вводится в контроллер (когда я пишу injectedContext2.table1.tolist ()

Подробнее здесь: https://stackoverflow.com/questions/794 ... -net-mvc-c

Вернуться в «C#»