首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ObjectStateManager中已存在具有相同键的对象。ObjectStateManager无法跟踪具有相同密钥的多个对象

ObjectStateManager中已存在具有相同键的对象。ObjectStateManager无法跟踪具有相同密钥的多个对象
EN

Stack Overflow用户
提问于 2012-04-30 03:36:37
回答 1查看 1.2K关注 0票数 0

我有以下EdiePOST操作方法:

代码语言:javascript
运行
复制
[HttpPost]
        public ActionResult Edit([Bind(Include = "Note,DoctorID,VisitID,StatusID,timestamp")] Visit visit) //[Bind(Include="Note,DoctorID,VisitID,StatusID")]
        {
            if ((visit.EditableByAssingedDoctor(User.Identity.Name)) || (visit.EditableByCreatedBy(User.Identity.Name)))
            {

                try
                {
                    if (ModelState.IsValid)
                    {

                        int id = visit.VisitID;
                        var v = repository.GetVisit(id);
                        visit.CreatedBy = v.CreatedBy;
                        visit.Date = v.Date;
                        visit.PatientID = v.PatientID;
                        visit.VisitTypeID = v.VisitTypeID;


                        repository.UpdateVisit(visit);
                        repository.Save();
                        return RedirectToAction("Index");
                    }
                }
                catch (DbUpdateConcurrencyException ex)
                {
//code goes here

其中repository.UpdateVisit(visit);为:-

代码语言:javascript
运行
复制
 public void UpdateVisit(Visit v)
            {
                entities.Entry(v).State = EntityState.Modified;

            }

但是当我运行我的应用程序并试图编辑访问对象时,我得到了以下错误:-

代码语言:javascript
运行
复制
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

关于repository.UpdateVisit(visit);方法,那么出了什么问题呢?BR

EN

回答 1

Stack Overflow用户

发布于 2012-04-30 05:56:49

将具有相同键的两个对象附加到同一上下文:repository.GetVisit(id)中的vrepository.UpdateVisit(visit)中的visit。这会导致异常。

因为您已经从数据库加载了实体,所以只需更新它的属性,然后保存它。而不是使用...

代码语言:javascript
运行
复制
repository.UpdateVisit(visit);

...use...

代码语言:javascript
运行
复制
repository.UpdateAttachedVisit(v, visit);

...with:

代码语言:javascript
运行
复制
public void UpdateAttachedVisit(Visit attachedVisit, Visit detachedVisit)
{
    entities.Entry(attachedVisit).CurrentValues.SetValues(detachedVisit);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10375302

复制
相关文章

相似问题

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