структура сущности DDD - PullRequest
0 голосов
/ 14 мая 2018

Я работаю над проектом 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 репозиториях :-(?

1 Ответ

0 голосов
/ 14 мая 2018

Нет, нет ... Забудьте о подходе, который вы упомянули, в итоге вы дважды напишите нужный вам код.Почему бы вам просто не использовать тип контекста БД:

В начале вашей функции, один if else:

DbContext context;

if(option1)
{
    context = new firstContextEntities();
}
else
{
    context = new secondContextEntities();
}

И оба ваших контекста почти одинаковы, вы будете использовать свой контекст, приведя его к большему (тому, который имеет наибольший доступ):

var FirstLine = ((secondContextEntities)context).Parameters.First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...