我對實體框架比較陌生。最近我遇到了這種奇怪的行爲(在我的腦海裏),真讓我感到困惑。將實體的狀態設置爲Deleted從dbContext中刪除實體
爲什麼被跟蹤的實體從dbContext中被移除,如果我將它的狀態設置爲Deleted?
例如:
var customers = db.Customers
.Where(customer => customer.FirstName.Contains("John"))
.Take(10)
.ToList();
//Let's iterate through the customers -list
//and remove the 5th customer
int i = 1;
foreach(var customer in customers)
{
if(i == 5)
{
//An exception will be thrown
db.Entry(customer).State = EntityState.Deleted;
}
i++;
}
當第五客戶的狀態從Unchanged
變更爲Deleted
整個對象會從上下文,甚至從customers
-list被破壞。更糟糕的是:這也會拋出一個異常,因爲這個動作改變了我們正在迭代的列表!
任何人都可以向我解釋爲什麼發生這種情況之前更改已被保存到數據庫通過調用db.SaveChanges()
?
因爲將實體標記爲已刪除並將其作爲查詢結果返回會很奇怪。 – Shoe 2015-01-26 18:51:13
請包括正在拋出的異常的詳細信息 – 2015-01-26 19:04:43