我有一个实体(我正在使用Code First),它看起来像这样:
例如,保存下一个节点是没有问题的。但是,如果前一个节点的ID为1,并且我试图将其下一个节点(即ID=1的节点)设置为2,则会抛出此异常信息:
“无法将对象添加到对象上下文中。该对象的EntityKey具有一个ObjectStateEntry,该条目指示该对象已经参与了不同的关系。”
我是这样保存节点的:
更新内容如下:
"并且像这样使用 GetSingle:"
更新1:
异常所在的代码行位于Update方法中:
public class Node
{
public int ID { get; set; }
public string SomeInfo { get; set; }
public virtual Node Previous { get; set; }
public virtual Node Next { get; set; }
}
例如,保存下一个节点是没有问题的。但是,如果前一个节点的ID为1,并且我试图将其下一个节点(即ID=1的节点)设置为2,则会抛出此异常信息:
“无法将对象添加到对象上下文中。该对象的EntityKey具有一个ObjectStateEntry,该条目指示该对象已经参与了不同的关系。”
我是这样保存节点的:
int nextId;
int previousId;
if (int.TryParse(Request["previous"], out previousId))
node.Previous = this.nodeRepository.GetSingle(previousId);
if (int.TryParse(Request["next"], out nextId))
node.Next = this.nodeRepository.GetSingle(nextId);
this.nodeRepository.Update(node);
更新内容如下:
public virtual void Update(T entity)
{
this.context.Entry(GetSingle(entity.ID)).State = EntityState.Detached;
this.context.Entry(entity).State = EntityState.Added;
this.context.Entry(entity).State = EntityState.Modified;
this.Save();
}
"并且像这样使用 GetSingle:"
public virtual T GetSingle(object id)
{
var query = this.entities.Find(id);
return query;
}
更新1:
异常所在的代码行位于Update方法中:
this.context.Entry(entity).State = EntityState.Modified;
Node.ID = 1
,那么Node.Previous.ID
和Node.Next.ID
也必须是1
。没有其他的值可用。可以说,您只能从一个节点创建一个循环到自身。在哪一行您得到了异常?当您得到异常时,node.ID
、previousId
和nextId
具有哪些值? - Slauma