是否有內置的方式使用主鍵將Linq刪除到Entites。Linq to Entities刪除
目前M編輯解決辦法是創建一個名爲DeleteTable(表作爲表名)
,然後在C#LINQ到實體存儲過程只是我context.DeleteTable(ID)
是這個最好的辦法?還有什麼其他選擇?
是否有內置的方式使用主鍵將Linq刪除到Entites。Linq to Entities刪除
目前M編輯解決辦法是創建一個名爲DeleteTable(表作爲表名)
,然後在C#LINQ到實體存儲過程只是我context.DeleteTable(ID)
是這個最好的辦法?還有什麼其他選擇?
如果您不想去數據庫檢索所有對象的字段,則可以創建該類的新實例,將其附加到新的上下文,刪除該對象並保存更改。這可以讓EF生成適當的刪除命令。
using (var context = new MyContext())
{
var myObject = new MyObject { ID = 3 };
context.MyObjectSet.Attach(myObject);
context.MyObjectSet.DeleteObject(myObject);
context.SaveChanges();
}
注意:這會引發您嘗試刪除不存在的對象的異常。如果你確定這個對象存在,那這是唯一合適的。
注2:此假定你已經設置了實體,以便生成的delete命令沒有引用任何其他領域比ID(即沒有時間戳性質,或任何類似的將被包括在查詢)
默認的方法是查詢實體,然後發出.DeleteObject(...)方法。
內這會不會要求2趟DB? – michael 2011-12-28 01:37:22
是的。如果您不想映射或調用顯式存儲過程,則只能使用有限的選項。 – 2011-12-28 11:56:52
@michael'附加'不需要旅行? – 2015-05-18 10:19:11
使用執行命令,以您的需求關閉的背景下,如:
mycontext.ExecuteCommand("DELETE FROM MYTABLE");
或
mycontext.ExecuteCommand("TRUNCATE TABLE MYTABLE");
HTH
我使用搜索項目來刪除,然後使用DeleteObject方法刪除它們(他們)。
Dim itemToDelete = (From u In db.SOME_TABLE Where u.ID = ID).FirstOrDefault
db.SOME_TABLE.DeleteObject(itemToDelete)
db.SaveChanges()
使用這個try catch塊
建議這樣做是否真的有效?甜!這會很有用。 +1 – BZink 2011-12-27 22:22:51
它的工作原理,但我應該補充說,它只適用於EF生成的刪除命令沒有引用除ID之外的其他字段。如果您有Timestamp字段,則EF會將其包含在生成的查詢中,但由於它不知道要使用的值,因此查詢將會出錯。 – hvd 2011-12-27 22:24:41