Entity Framework Code First Soft Удалить Ленивая Загрузка - PullRequest
1 голос
/ 07 марта 2012

Итак, я сначала использую Entity Framework Code (т.е. нет .edmx). У меня есть базовый класс сущности с bool IsEnabled для мягкого удаления

. Я использую шаблон хранилища, поэтому все запросы к хранилищу могутбыть отфильтрованы с помощью IsEnabled.

Однако в любое время, когда я использую репозиторий для получения MyType, который является IsEnabled, MyType с отложенной загрузкой может означать, что элементы могут быть не включены.

Есть лиКстати, возможно, с помощью EF Fluent, чтобы описать, как выполнять фильтрацию по таблицам?

Обновление:

Если у меня есть Dbset

public class UnitOfWork : DbContext
    {
private IDbSet<MyObj> _MyObj;
public IDbSet<MyObj> MyObjs
        {
            get { return _MyObj ?? (_MyObj = base.Set<MyObj>()); }
        }
}

Есть ли способ, которым я могу сказатьDbContext для фильтрации DbSet?

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

Нет, невозможно определить фильтр для отложенной загрузки (также не для активной загрузки с использованием Include). Если вы хотите, чтобы ваши навигационные коллекции заполнялись только элементами, в которых IsEnabled равен true, вы можете соответствующим образом формировать свои запросы, например, с явной загрузкой:

context.Entry(parent).Collection(p => p.Items).Query()
    .Where(i => i.IsEnabled)
    .Load();

Это заполнит коллекцию Items из parent только включенными элементами.

Редактировать

Я чувствую себя немного похожим на посланника плохих новостей о проигранном сражении, которого сбивают с ног. Может быть, слишком сложно поверить, что Entity Framework иногда не имеет необходимых возможностей. Чтобы улучшить мой шанс убедить вас, я добавляю цитату от авторитета Джули Лерман :

Ни стремительная загрузка, ни отложенная / отложенная загрузка в сущности Framework позволяет фильтровать или сортировать связанные данные вернулся.

1 голос
/ 26 марта 2014

Похоже, это все еще возможно. Если вам интересно, вы можете взглянуть на пост Wiktor Zychla , где он дает решение проблемы мягкого удаления.

0 голосов
/ 08 марта 2012

Этот http://blogs.claritycon.com/blog/2012/01/25/a-smarter-infrastructure-automatically-filtering-an-ef-4-1-dbset/ в основном определяет, как я могу достичь того, что искал.

По сути, вы создаете FilteredDbSet и заставляете все ваши DbContext IDbSet возвращать его.

...