2
我有這個在我的MVC的ActionResult更新數據使用LINQ2SQL
[HttpPost]
public ActionResult _ChangeDetails([Bind(Prefix="ContactDetails")] userDetail UserDetail)
{
MemberChangeDetailsFormViewModel fvm = new MemberChangeDetailsFormViewModel();
if (ModelState.IsValid)
{
//save
UserDetailRepository repository = new UserDetailRepository();
repository.Save(UserDetail);
return RedirectToAction("Index", "Member");
}
fvm.ContactDetails = UserDetail;
return View(fvm);
}
然後在我的倉庫我有;
if (userDetail.id != Guid.Empty)
{
userDetail orig = dc.userDetails.Where(x => x.id == userDetail.id).Single();
dc.userDetails.Attach(userDetail, orig);
dc.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, userDetail);
dc.SubmitChanges();
}
但是「attach」正在產生一個錯誤; 無法添加已使用密鑰的實體。
我知道這是因爲L2S已經附加了對象。我曾嘗試過這樣做,但沒有使用orig對象,但得到相同的消息。
從模型更新表中的數據的最佳做法是什麼?
錯誤發生在「附加」,所以選項2不會工作,我不知道我想要第二個上下文。我應該採取originalUser,更新字段,然後提交更改?看起來有點落後於我 – griegs 2011-03-27 05:52:38
格里格斯,你放在問題中的代碼失敗了,因爲它試圖用相同的鍵將兩個對象加載到上下文中:orig(使用Where/Single查詢)和userDetails(使用Attach。)Option 2工作,因爲它只加載一個這樣的對象:userDetails與附加。如果你還沒有真正嘗試過,你可能想要一試。 – 2011-03-27 06:26:38
我已經試過它只有一個對象,我得到了同樣的結果。我嘗試了使用和不使用orig對象。 – griegs 2011-03-27 06:38:21