2017-04-19 102 views
0

我想創建一個分層的MVC項目,但我在EF中有一個更新問題。我收到以下錯誤。EF,更新不起作用,它說實體可能已被修改或刪除,因爲實體被加載。

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. 

我有DAL和BusinessLayer。在DAL,我有UPDATE

public void Update(params T[] entities) 
{ 
    using (var context = new BorselDBEntities()) 
    { 
     foreach (T entity in entities) 
     { 
      context.Entry(entity).State = EntityState.Modified; 
     } 
     context.SaveChanges(); 
    } 
} 

下面的代碼,這是我怎麼稱呼從BusinessLayer

public void UpdateProduct(params Product[] products) 
{ 
    _productRepository.Update(products); 
} 

的DAL爲什麼會出現上述錯誤,我還能有什麼辦法解決?

+0

你可以放置一個斷點並檢查實體的ID嗎? – Usman

回答

1

一個常見的原因是context.Entry(實體)無法獲取您想要更新的實體。

當你在調試時,看看context.Entry(entity)是否返回實體;很容易把它放在一個單獨的線和設置斷點AFER完成:

public void Update(params T[] entities) 
{ 
    using (var context = new BorselDBEntities()) 
    { 
     foreach (T entity in entities) 
     { 
      var myEntity = context.Entry(entity); 
      myEntity.State = EntityState.Modified; 
     } 
     context.SaveChanges(); 
    } 
} 

如果不是的話,你需要工作,通過您的代碼,並找出它爲什麼不能夠把它撿起來。通常這是因爲身份/主鍵列未在「實體」上設置。

E.g.在MVC應用程序,如果你有一個編輯/更新形式,記得有一個

@Html.HiddenFor(model => model.Id) 
+0

感謝您的幫助。我試着按照你的說法和context.Entry(entity)按預期返回對象。我還應該檢查什麼? –

相關問題