簡體   English   中英

在mvc ef中更新相關表

[英]Updating related tables in mvc ef

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

從該消息看來,某些表中的0行受到了影響。 在我看來,並非所有值都將被編輯。 僅屬於某些表的某些值將被編輯,而某些將按原樣存儲。 因此,如果一張表中的值根本沒有被編輯,並且如果我嘗試執行以下操作,則會彈出上述錯誤-

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

有一種方法只能修改那些在“編輯視圖”中編輯了值的表的實體狀態嗎? 還是有其他更好的方法呢?

請幫忙。 謝謝。

對於此處的項目,我們執行了以下操作:

也許重要的一個是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();

也許這是您可以使用的東西? 不確定相同的方法是否可以幫助您解決問題。

編輯實體的示例:

//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循環中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM