我有一個更詳細的問題,我沒有回答,我會有一個更簡單的方法相同的問題:如何更新實體?
我有一個EF數據庫與外鍵到另一個表。
我想UPDATE的實體。但我需要這個像這樣,我會寫下面的代碼:
- 轉到數據庫和檢索通過 ID的會員,返回EF成員對象
- 執行對象OUTSIDE上的一些變化EF上下文
- 發送修改 EF成員進入保存方法
- BL層保存方法使用上下文並保存更改。
1)
MemberManager currentMemberManager = new MemberManager();
Member NewMember = currentMemberManager.GetById(2);
2)
NewMember.FirstName = "NewFirstName";
NewMember.LanguageId = 1;
3)
currentMemberManager.Save(NewMember);
4)
public void Save2(Member newMember)
{
using (var Context = new NoxonEntities())
{
Member existingMember = Context.Member.First(c => c.Id == newMember.Id);
existingMember.FirstName = newMember.FirstName;
existingMember.Language = Context.Language.First(c => c.Id == newMember.LanguageId);
Context.SaveChanges();//In here I get the error below
}
}
對數據庫的更改已成功提交,但在更新對象上下文時發生了錯誤 。 ObjectContext可能是 處於不一致狀態。內部異常消息:參考 發生完整性約束衝突: 定義參照約束的屬性值在 關係中的主體和從屬對象之間不一致。
注意:您可以建議發送不同的類(例如:公共類 MyMember)具有所有必要的屬性,完全由EF分離 。但是,這需要很多工作才能將所有EF對象轉換成我的獨立課程 。我對嗎?
我希望有一種方法可以分離實體足夠長的時間來修改它並將值保存到數據庫中。 (另外,我嘗試了Detach方法,它根本不更新行)
我一直試圖解決這個問題,現在幾個小時。
請幫助我更好地理解它,我真的需要一個解決方案。非常感謝任何人有一些想法。
是否與你的新成員上設置ID語言數據庫中存在嗎?如果沒有,您需要在保存更改之前將其添加到上下文中。 –
是的。與語言ID相關的Id已經存在於語言表上了。所以沒有關係問題。 –
而不是Context.Member.First,也許你可以嘗試使用Attach方法 – lgoncalves