В настоящее время я использую условные отображения в EF4, чтобы отфильтровать все записи, в которых их столбец IsActive имеет значение false.Это работает как задумано, но я сталкиваюсь с проблемой при навигации по отношениям.
Например, у меня есть отношение один ко многим, когда в Магазине может быть много записей инвентаризации.Магазин может быть помечен как IsActive, как и записи инвентаризации, которые ему принадлежат.Запрос непосредственно для записей в этих таблицах работает как задумано (возвращаются только активные записи), но я также могу получить записи инвентаризации, где связанное хранилище не активно.Это позволяет получить доступ к неактивному хранилищу и не дает возможности определить, является ли хранилище активным.
До перехода к использованию условного сопоставления мы использовали запросы, подобные следующим:
Inventories.Where(i => i.IsActive && i.Store.IsActive && i.Product.IsActive && i.Product.Id == productId);
Я надеялся, что мы могли бы упростить этот запрос до этого:
Inventories.Where(i => i.Product.Id == productId);
Это не работает для меня, так как у меня больше нет возможности узнать, активны ли Магазин или Продукт (так как я не могу использовать условное сопоставление для IsActive, все еще сопоставляя этот столбец).
Есть ли способ репликации этого запроса, используя преимущества условного сопоставления в EF4?Я вынужден отказаться от условного отображения и надеяться, что все запросы проверят все соответствующие поля IsActive?