Как удалить объект из модели Entity Framework без предварительной загрузки?

asp.net-mvc entity-framework linq-to-entities

Вопрос

Я совершенно уверен, что где-то видел ответ на этот вопрос, но так как я не смог найти его с помощью пары запросов в SO или Google, я все равно спрашиваю его ...

В Entity Framework единственным способом удаления объекта данных является

MyEntityModel ent = new MyEntityModel();
ent.DeleteObject(theObjectToDelete);
ent.SaveChanges();

Однако этот подход требует, чтобы объект был загружен, в данном случае сначала в контроллер, просто для его удаления. Есть ли способ удалить бизнес-объект, ссылающийся только на его идентификатор?

Если есть более разумный способ использования выражений Linq или Lambda, это тоже хорошо. Однако главная цель - не загружать данные, а просто удалять их.

Принятый ответ

Стоит знать, что Entity Framework поддерживает как Linq to Entities, так и Entity SQL. Если вы обнаружите, что хотите делать удаления или обновления, которые могут повлиять на многие записи, вы можете использовать эквивалент ExecuteNonQuery .

В Entity SQL это может выглядеть так

   Using db As New HelloEfEntities

        Dim qStr = "Delete " & _
                  "FROM Employee"
        db.ExecuteStoreCommand(qStr)
        db.SaveChanges()
    End Using

В этом примере db - мой ObjectContext . Также обратите внимание, что функция ExecuteStoreCommand принимает необязательный массив параметров.


Популярные ответы

Я нашел этот пост , в котором говорится, что действительно нет лучшего способа удалить записи. Было дано объяснение, что все внешние ключи, отношения и т. Д., Которые являются уникальными для этой записи, также удаляются, и поэтому EF должна иметь правильную информацию о записи. Я озадачен тем, почему этого нельзя достичь без загрузки данных туда-сюда, но так как это не произойдет очень часто, я решил (пока), что я не буду беспокоиться.

Если у вас есть решение этой проблемы, дайте мне знать =)



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему