У меня есть объект (я сначала использую код), который выглядит так:
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 равен 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
Строка с исключением в методе обновления:
this.context.Entry(entity).State = EntityState.Modified;