我最近注意到有兩種不同的方法可以從實體框架中的DB中刪除條目。從db中刪除條目
我原本執行它使用以下
db.Courses.Remove(course);
但後來我發現,你還可以做以下
db.Entry(course).State = EntityState.Deleted;
是兩者之間有什麼區別? 我可以想到我切換到後者的唯一原因是在我的實現中更一致,因爲這是我用來編輯條目的方法。
有什麼想法?
我最近注意到有兩種不同的方法可以從實體框架中的DB中刪除條目。從db中刪除條目
我原本執行它使用以下
db.Courses.Remove(course);
但後來我發現,你還可以做以下
db.Entry(course).State = EntityState.Deleted;
是兩者之間有什麼區別? 我可以想到我切換到後者的唯一原因是在我的實現中更一致,因爲這是我用來編輯條目的方法。
有什麼想法?
這兩種方法都標記爲刪除的實體,所以下db.SaveChanges();從數據庫和上下文中刪除它們。
本文介紹您可以添加,修改和刪除實體的所有方法。
http://msdn.microsoft.com/en-us/library/gg696174(v=vs.103).aspx
他們都做大致相同的事情。
後者只是將記錄狀態設置爲刪除,前者爲Detached。您仍然必須致電保存更改以反映記錄刪除。所示
using (var context = new SchoolEntities())
{
var dpt = new Department { Name = "Mathematics", DepartmentID = 1};
context.Entry(dpt).State = EntityState.Added;
context.SaveChanges();
}
代碼是從相同的資源的其他回答
在這兩種情況下,您都需要調用SaveChanges(),並且在這兩種情況下它們都被標記爲已刪除(並實際刪除)。 –
是的我看到了,說錯了 –
是,thare是他們兩人之間的差異。
如果您在模型上設置級聯選項,以便將客戶標記爲已刪除時,則在上下文中加載的訂單也會標記爲刪除。
例如
var customer = db.Customers.Include(c => c.Orders).First(c => c.CustomerId == 1); db.Customers.Remove(customer); // at this point all orders in teh context are also marked as deleted.
然而,當你這樣做
db.Entry(customer).State = EntityState.Deleted;
爲刪除不標明訂單。
Remove()方法只是圍繞我猜想的狀態提供的便利幫助。 –