Я работаю над проектом EF Core для приложения WPF.
Мы решили разделить DbContext на 2 части: (проект содержит одну базу данных)
public class FirstDbContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public DBSet<Parameters>{ get; set; }
}
public class SecondDbContext: DbContext
{
public DBSet<User>{ get; set; }
public DBSet<Books> { get; set; }
public DBSet<Parameters>{ get; set; }
}
и мы сохраняем «супер» DbContext (который содержит все наборы DbSets из БД) для обслуживания и миграции БД
public class SuperDbContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public DBSet<User>{ get; set; }
public DBSet<Books> { get; set; }
public DBSet<Parameters>{ get; set; }
}....
Первый шаг к рефакторингу кода состоит в замене строк, которые ссылаются на «SuperDbContext ...», на правильный вызов «SecondDbContext.Books ...» или «FirstDbContext.Post» ... OK
Вопрос:
В клиентском приложении выбор DbContext зависит от выбора пользователя при запуске приложения: если пользователь выбирает option1 => FirstDbContext и если option2 => SecondDbContext.
Как мы можем написать код для включения текущего DbContext для управления «общим DbSet» (параметрами): перед рефакторингом мы имеем, например:
SuperDbContext.Parameters.FirstOrDefault () ...
и сейчас ? мы должны написать что-то вроде этого:
if(option1)
{
FirstDbContext.Parameters.First()
}else
{
SecondDbContext.Parameters.First()
}
А как это влияет на репозитории? потому что если мы поддерживаем этот подход, мы должны дублировать код в 2 репозиториях :-(?