如何在不首先加载对象的情况下从Entity Framework模型中删除对象?

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

我很确定我已经在某个地方看到了这个问题的答案,但是由于我在SO或谷歌上搜索了几次,我无论如何都要问它...

在Entity Framework中,删除数据对象的唯一方法似乎是

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

但是,这种方法需要首先将对象加载到Controller,只是为了删除它。有没有办法删除仅引用其ID的业务对象?

如果使用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
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因