2012-06-19 76 views
0

我有一個數據表,其中包含一個鍵值對列表。MVC3實體框架代碼首先更新子集相關項目列表

Key   Value 
-------------------- 
ElementName PrimaryEmail 
Email   [email protected] 
Value   Content/Images/logo-here.jpg 

我可以在我的客戶端網頁上生成新項目。何時,我在客戶端上創建一個新行並通過執行以下代碼將其保存到服務器,該項目按預期保存到數據庫。

public ViewResult Add(CardElement cardElement) 
{  
    db.Entry(obj).State = EntityState.Added; 
    db.SaveChange(); 
    return Json(obj); 
} 

現在,當我想通過發送另一個Ajax請求,我得到一個失敗刪除我的對象。

public void Delete(CardElement[] cardElements) 
{ 
    foreach (var cardElement in cardElements) 
    { 
     db.Entry(cardElement).State = EntityState.Deleted; 
    } 
    db.SaveChanges(); 
} 

這會導致以下錯誤。

存儲更新,插入或刪除語句影響了意外數量的行(0)。自實體加載後,實體可能已被修改或刪除。刷新ObjectStateManager條目。

我試過其他的刪除方法,包括通過id找到刪除和附加和刪除,但顯然我接近了正確的方式。

回答

0

我不知道是什麼原因造成您的問題,但我傾向於構建我刪除如下:

public void Delete(CardElement[] cardElements) 
{ 
    foreach (var cardElement in cardElements) 
    { 
     var element = db.Table.Where(x => x.ID == cardElement.ID).FirstOrDefault(); 

     if(element != null) 
      db.DeleteObject(element); 
    } 
    db.SaveChanges(); 
} 

雖然我傾向於做數據庫第一的發展,這可能會稍微改變一些事情。

編輯:您收到錯誤狀態,沒有行更新。當您將對象傳遞給視圖時,將其傳遞迴控制器,這往往會破壞對象與數據存儲之間的鏈接。這就是爲什麼我更願意首先根據其ID來查找對象,以便我有一個仍與數據存儲鏈接的對象。