有一堆MVC/EF代碼,我正在調試,其他人已經從Java編寫過渡過。從代碼對象處於分離狀態。當對象被分離時,該操作無法在ObjectStateEntry上執行
一個片斷類似於此:
public ActionResult Index()
{
using (var context = new Models.FooEntities())
{
var exp = context.Expenses.FirstOrDefault(e => e.Id == 17);
if (exp != null)
{
context.Expenses.DeleteObject(exp);
context.SaveChanges();
}
}
return Content("Deleted");
}
簡單。對?它應該與ID 17
但是刪除實體的費用,調用SaveChanges
引發與消息的InvalidOperationException
,"The object is in a detached state. This operation cannot be performed on an ObjectStateEntry when the object is detached."
現在,我明白了消息,我很驚訝,因爲根據有關機構是從來沒有與上下文分離。至少從我在上面的代碼片段中看到的。
可能不僅僅是滿足眼睛,但我會考慮作爲一個選項,當我沒有更多的選擇,因爲這是一個噩夢跟蹤整個調用堆棧這個大部分寫得不好的Java代碼沒有人理解。
乍一看我唯一能想到的就是在上下文本身中禁用延遲加載_and_刪除實體會觸發級聯刪除,但是不會通過數據庫中的級聯刪除FK約束來實現。 –
這使得很多意義。謝謝。阿瑪明天嘗試並報告回來。 –
它也可以是一個非延遲加載的集合,因爲它不是'虛擬'的,或者可以禁用代理生成。 –