我有一个实体(我首先使用代码),看起来像这样:
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; }
}
例如,保存下一节点没有问题。但是,如果Previous的ID为1,并且我尝试将Next Node(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;
答案 0 :(得分:0)
您的上下文是否在使用块中并在某个时候被处置?我有类似的'该对象无法添加到对象上下文中。"错误。我会为模型的上一个和下一个添加Id,并使用它们来更新外键。
public class Node
{
public int ID { get; set; }
public string SomeInfo { get; set; }
public virtual Node Previous { get; set; }
public int PreviousId { get; set; }
public virtual Node Next { get; set; }
public int NextId { get; set; }
}
更新外键......
int nodeId; // I'm assuming you know the id of node you want updated.
int nextId;
int previousId;
using (var context = new Context())
{
// Perform data access using the context
var node = context.Nodes.find(nodeId);
node.NextId = nextId;
node.PreviousId = previousId;
context.SaveChanges();
}