我是一名開發人員,仍然在學習EF4的複雜性。我很清楚如何下拉對象列表,並在循環中迭代刪除它們,但是我無法自己寫一些代碼來執行n條記錄(和數據庫往返)更新或刪除。是否可以使用EF4執行高效的多行DELETE或UPDATE?
一個經典的案例,這是之前刪除相關父記錄,以保持參照完整性。(是的,我使用軟刪除默認,但幽默我)
在存儲過程中我刪除子記錄ð只是執行SQL,像這樣:
DELETE FROM someChildTable WHERE ForeignTableId = @keyToGo
DELETE FROM parentTable WHERE Id = @keyToGo
在LINQ to SQL我這樣做:
dataContext.ChildrenTable.DeleteAllOnSubmit(from c in dataContext.ChildrenTable
where c.ParentTableId == keyToGo
select c);
dataContext.ParentTable.DeleteOnSubmit(parentToGo);
dataContext.SubmitChanges();
在NHibernate的我會做到這一點:
nhSession.CreateQuery("delete from ChildrenTable where ParentTable.Id = :keyToGo")
.SetInt32("keyToGo", keyToGo)
.ExecuteUpdate();
nhSession.Delete(parentToGo);
我已經找過這些沒有成功的EF等價物。 我必須真的回到存儲過程才能在EF4的上下文中執行此操作嗎? 我不希望;請分享。
我不知道EF所以不能回答你的問題,但對於NHibernate,你只需打開Cascade All或Cascade Delete就可以了,而且無需爲孩子創建查詢就可以處理它關係。 – Phill 2010-12-01 02:54:47