Частичный EF-контекст OnModelCreating с использованием Scaffold-DbContext - PullRequest
0 голосов
/ 06 декабря 2018

Я использую первую разработку базы данных и использую Scaffold-DbContext для создания моего проекта моделей сущностей.В этом проекте у меня есть частичный dbContext, где я переопределяю методы, такие как SaveChangesAsync, чтобы установить определенные свойства, такие как «LastModifiedBy».

Я ищу, чтобы мягко удалять записи, используя столбцы dateDeleted / userDeleted.Когда я иду, чтобы переопределить подпрограмму OnModelCreating, я вижу, что она уже определена в автоматически сгенерированном частичном контексте.

Я пытаюсь сделать что-то вроде следующего:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeEntity>().HasQueryFilter(x => x.DateDeleted == null);
}

Делаету кого-нибудь есть какие-либо предложения относительно того, как я могу сделать это частичным классным способом, который все еще позволяет мне восстанавливать исходный контекст на лету, используя Scaffold-DbContext?

Также обратите внимание, что я использую .NET Core 2.1.5

ОТВЕТ ОТ Дэвида Брауна - Microsoft

Добавьте статическое свойство в частичный контекст

public static bool GlobalFiltersAdded { get; set; } = false;

Затем добавьте подпрограмму для добавления вашегофильтры:

private void AddGlobalFilters(ModelBuilder modelBuilder){
    SomeContext.GlobalFiltersAdded = true;
}

Затем в вашем сгенерированном контексте добавьте следующее:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    AddGlobalFilters(modelBuilder);
    //OTHER LOGIC WILL BE HERE
}

1 Ответ

0 голосов
/ 06 декабря 2018

Опции:

1) Удалить сгенерированную OnModelCreating после повторной сборки лесов.Это уже ручной процесс, который генерирует ошибку компиляции, если вы забудете.

2) Используйте DbContext, унаследованный от сгенерированного DbContext.

3) Используйте сторонний инструмент или библиотеку, например: EF Core Электроинструмент

...