gpt4 book ai didi

asp.net-mvc - 使用 Linq2Sql 更新数据

转载 作者:行者123 更新时间:2023-12-04 06:30:46 26 4
gpt4 key购买 nike

我的 mvc ActionResult 中有这个

    [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();
}

但是,“附加”会产生错误; 无法使用已在使用的 key 添加实体。

我知道这是因为 L2S 已经附加了对象。我曾尝试在使用和不使用 orig 对象的情况下执行此操作,但得到相同的消息。

从模型更新表中的数据的最佳做法是什么?

最佳答案

Linq-to-SQL 无法处理同一数据上下文中具有相同键的两个对象。一些选项:

选项 1:使用两种不同的数据上下文:

public void Update(UserDetail modifiedUser)
{
using (UserDetailDataContext dc1 = new UserDetailDataContext())
using (UserDetailDataContext dc2 = new UserDetailDataContext())
{
UserDetail originalUser = dc1.UserDetails.Single(u => u.id == modifiedUser.id);
dc2.UserDetails.Attach(modifiedUser, originalUser);
dc2.SubmitChanges();
}
}

选项 2:不要拉原物;将新对象注释为更新:
public void Update(UserDetail modifiedUser)
{
using (UserDetailDataContext dc = new UserDetailDataContext())
{
dc.UserDetails.Attach(modifiedUser);
dc.Refresh(RefreshMode.KeepCurrentValues, modifiedUser);
dc.SubmitChanges();
}
}

更多讨论在 this question ,而 Rick Strahl 有一个 blog entry这涵盖了基于版本的策略,如果您愿意修改表架构以添加时间戳。

关于asp.net-mvc - 使用 Linq2Sql 更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com