свойство навигации для мягко удаленного объекта - PullRequest
2 голосов
/ 12 августа 2011

У меня 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 ]

3 голосов
/ 13 августа 2011

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

enter image description here

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

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

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

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

1 голос
/ 12 августа 2011

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

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

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

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