Entity Framework 6.1 - как вы можете запрашивать мягкие удаленные записи? - PullRequest
0 голосов
/ 01 апреля 2019

Я использую Entity Framework 6.0 с первым кодом и внедрил решение мягкого удаления на основе https://putshello.wordpress.com/2014/08/20/entity-framework-soft-deletes-are-easy/.. Это хорошо работает и автоматически игнорирует записи, где IsDeleted равно true. Итак, у моего конструктора моделей есть запись, подобная следующей:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Company>()
        .Map(m => m.Requires("IsDeleted").HasValue(false))
        .Ignore(m => m.IsDeleted);
}

Теперь у меня есть требование для доступа к удаленным записям, но только в одном разделе приложения. Поэтому мне нужно выбрать записи, где IsDeleted верно.

Если я попытаюсь просто использовать:

    where company.IsDeleted = true

Сбой со следующим сообщением:

Указанный элемент типа 'IsDeleted' не поддерживается в LINQ to Entities. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей.

Я посмотрел повсюду, и есть много информации о Entity Framework Core 2.0, но ничего об EF6.1. Кроме использования сценариев SQL со старым SqlClient, есть ли у кого-нибудь подсказки, как получить доступ к этим записям с помощью linq для сущностей?

1 Ответ

0 голосов
/ 01 апреля 2019

В конце концов, единственный способ легко решить эту проблему - реализовать EntityFramework.DynamicFilters из https://github.com/zzzprojects/EntityFramework.DynamicFilters. Это отличное решение, обеспечивающее гибкое динамическое отключение фильтра.

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
    modelBuilder.Filter( "IsDeleted", ( ISoftDelete d ) => d.IsDeleted, false ));
}

Затем вы добавляете интерфейс:

internal interface ISoftDelete
{
    bool IsDeleted { get; set; }
}

Затем выключите (при необходимости) фильтр IsDeleted:

ctx.DisableFilter( "IsDeleted" );

Намного проще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...