我正在使用实体框架 4.0。我在更新数据库中的数据时遇到问题。我得到了这个例外:
ObjectStateManager 中已存在具有相同键的对象。
ObjectStateManager 无法跟踪具有相同键的多个对象。
我正在研究关系数据库。以下是 3 个实体及其关系:
1 to * 1 to *
Ceremony -----------> Menu ------------> CourseOption
如果我更新已经包含Menus
and的仪式,一切正常CourseOptions
。当我们在更新时在仪式中插入新的Menu
和条目时,问题就来了。CourseOption
比我得到上述例外。
更新现有仪式的 C# 代码
public HttpResponseMessage PutCeremony(int id, Ceremony ceremony)
{
if (ModelState.IsValid && id == ceremony.Id)
{
db.Entry(ceremony).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK, ceremony);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
我怎样才能摆脱这个问题?请帮忙
编辑
今天我花了一整天的时间,我读了很多文章和stackoverflow问题。我发现那once a product is fetched from the Context, the context is keeping track of it
为什么不使用:
db.Entry(ceremony).State = EntityState.Modified;
我用了
db.Entry(db.Ceremonies.Find(ceremony.Id)).CurrentValues.SetValues(ceremony);
现在通过执行此更改,异常消失了,Ceremony 实体属性正在正确更改。但是仪式相关的 Menus 条目和 CourseOptions 条目没有更新。请各位大侠给点建议。我是 EF 的新手。