2016-09-21 85 views
0

我有6個相關的表格。我正在使用視圖模型來顯示我視圖中所有6個表的屬性。我可以使用上述結構在單個事務中添加數據。但是,在編輯我得到的數據時 - 「存儲更新,插入或刪除語句會影響意外數量的行(0)。實體可能已被修改或刪除,因爲實體已加載。」錯誤信息。更新mvc ef中的相關表格

從消息看來,在某些表中,0行受到了影響。在我看來,可能不會編輯每個值。只有屬於某個表格的一些值纔會被編輯,而其中一些值將被保存。因此,如果從一個表中的值不是在所有編輯,如果我嘗試做以下內容,然後上面的錯誤彈出向上

db.Entry(tbl).State = EntityState.Modified; 
db.SaveChanges(); 

有沒有辦法只修改那些值表的實體狀態在編輯視圖中編輯?或者還有其他更好的方法嗎?

請幫忙。謝謝。

+0

http://stackoverflow.com/questions/1836173/entity-framework-store-update-insert-or-delete-statement-affected-an-unexpec – Nsevens

+0

@Nsevens感謝您的網址,但我已經通過它這並沒有幫助解決我的錯誤。 – arpymastro

回答

0

對於項目在這裏我們做了以下內容:

也許一個重要的一項,是Context.People.Attach()方法。

Context.People.Attach(person); 

// Disable validation otherwise you can't do a partial update 
Context.Configuration.ValidateOnSaveEnabled = false; 

Context.Entry(person).Property(x => x.AddressId).IsModified = true; 
Context.Entry(person).Property(x => x.Birthday).IsModified = true; 
Context.Entry(person).Property(x => x.Name).IsModified = true; 
... 

await Context.SaveChangesAsync(); 

也許這是你可以使用的東西?不知道是否相同的方法可以幫助你的情況。

0

編輯實體的例子:

//Get the database entry 
var entity = db.Person.First(c=>c.ID == 1); 
//OR 
//Attach a object to the context, see Nsevens answer. 
db.Person.Attach(entity); 

//Change a property 
entity.Job = "Accountant"; 

//State it's a modified entry 
db.Entry(entity).State = EntityState.Modified; 

//Save 
db.SaveChanges(); 

如果你正在編輯多個條目,你將需要設置每一位EntityState.Modifed,例如在foreach循環。

+0

在上面的例子中,實體的單個屬性(Job)被修改。如果沒有對物業進行任何修改,這也會起作用嗎?或者有沒有一種方法可以跟蹤是否爲屬性提供了新的/更新的值(從視圖),那麼只有實體狀態被修改? – arpymastro

+0

這聽起來像你必須在你的應用程序中建立的邏輯。可以手動跟蹤任何實體是否已更改或將每個實體與數據庫對象進行比較。理想情況下,您不應該在未修改的項目上更改「EntitiyState」,但是如果編輯的實體數量相對較小,則可能會好,因爲這會浪費資源。 – Wurd