首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Linq2Sql更新数据

使用Linq2Sql更新数据
EN

Stack Overflow用户
提问于 2011-03-26 06:32:35
回答 1查看 492关注 0票数 2

我的mvc ActionResult中有这个

代码语言:javascript
复制
    [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);
    }

然后在我的仓库里;

代码语言:javascript
复制
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();
}

但是,“附加”正在生成错误;不能添加一个具有已在使用的密钥的实体。

据我所知,这是因为L2S已经附加了对象。我尝试过使用和不使用orig对象来完成这个操作,但是得到了相同的消息。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-27 02:36:04

Linq不能在相同的数据上下文中处理两个键相同的对象。一些备选方案:

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

代码语言:javascript
复制
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:不提取原始对象;将新对象注释为更新:

代码语言:javascript
复制
public void Update(UserDetail modifiedUser)
{
    using (UserDetailDataContext dc = new UserDetailDataContext())
    {
        dc.UserDetails.Attach(modifiedUser);
        dc.Refresh(RefreshMode.KeepCurrentValues, modifiedUser);
        dc.SubmitChanges();
    }
}

这个问题中还有更多的讨论,Rick有一个博客条目,它涵盖了基于版本的策略,如果您愿意修改表模式以添加时间戳的话。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5440746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档