Свойство навигации для мягко удаленного объекта

У меня 2 энтита
Я моя БД, они выглядят так:

Vehicles(Id, VehicleNumber, IsDeleted, WorkerId)   
Workers(Id, Name, Address)

И в моем edmx:

VehicleId: Id, VehicleNumber, IsDeleted, WorkerId, Worker
Workers: Id, Name, Address, VehiclesList

Как видите, таблица Транспорт содержит мягкие удаленные строки. Теперь, когда я получаю Worker с id=2, я получаю все его транспортные средства, включая тот, который я мягко удалил. Как я могу получить только восстановленные транспортные средства?

2 ответа

Решение

Плохо. EF имеет очень ограниченную поддержку мягких удалений. На самом деле единственная возможность - использовать условное сопоставление, при котором вы явно указываете жесткий код (его нельзя изменить во время выполнения) в ваше условие сопоставления, говоря, что вы не хотите загружать объекты, имеющие IsDeleted = 0, Проверьте детали отображения:

Но это имеет очень плохие последствия:

  • IsDeleted столбец не может быть отображен - он уже определяет отображение внутри
  • Ваша модель никогда не может быть использована для загрузки мягко удаленных объектов, даже если вы хотите

Первая проблема может быть решена путем сопоставления хранимой процедуры, чтобы удалить операцию для Vehicle сущность и вторая проблема могут быть решены с помощью отдельной модели для аудита и извлечения удаленных сущностей.

Также условное отображение не поддерживается кодом в первую очередь - для этого требуется файл EDMX.

Включена отложенная загрузка? затем попытайтесь ограничить результирующий набор с помощью:

worker.VehiclesList.Where(x=>!x.IsDeleted)

также вы можете поставить условие для отображения таблицы транспортных средств в модели desiner isdeleted = false. Мягкие удаленные автомобили не будут восстановлены вообще

Другие вопросы по тегам