2012-05-26 348 views
1

我最近注意到有兩種不同的方法可以從實體框架中的DB中刪除條目。從db中刪除條目

我原本執行它使用以下

db.Courses.Remove(course); 

但後來我發現,你還可以做以下

db.Entry(course).State = EntityState.Deleted; 

是兩者之間有什麼區別? 我可以想到我切換到後者的唯一原因是在我的實現中更一致,因爲這是我用來編輯條目的方法。

有什麼想法?

+0

Remove()方法只是圍繞我猜想的狀態提供的便利幫助。 –

回答

1

他們都做大致相同的事情。

後者只是將記錄狀態設置爲刪除,前者爲Detached。您仍然必須致電保存更改以反映記錄刪除。所示

using (var context = new SchoolEntities()) 
{ 
    var dpt = new Department { Name = "Mathematics", DepartmentID = 1}; 
    context.Entry(dpt).State = EntityState.Added; 
    context.SaveChanges(); 
} 

代碼是從相同的資源的其他回答

+0

在這兩種情況下,您都需要調用SaveChanges(),並且在這兩種情況下它們都被標記爲已刪除(並實際刪除)。 –

+0

是的我看到了,說錯了 –

2

是,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;

爲刪除不標明訂單。