如何在不首先加載對象的情況下從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合法嗎? 是的,了解原因