我有一个我需要保存两次的实体。 第一次是设置ID。 需要填写此ID以计算签名,并将该签名存储回实体。
请参阅以下代码:
var newEntity = new MyEntity
{
\\ set values
};
using (var db = MyContainer.CreateContainer())
{
db.MyEntity.Add(newEntity);
// Call SaveChanges() to set the ID.
db.SaveChanges();
// I need to do some calculation on the entity
myEntity.Signature = CalculateSignature(myEntity);
db.SaveChanges(); // <--- This causes the exception
}
这段代码会导致InvalidOperationException,即The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects.
我不明白,我不允许两次保存同一个实体吗?我将如何实现这一目标?
答案 0 :(得分:2)
我猜测CalculateSignature
也会创建一个上下文。看看Entity Framework Multiple Object Contexts
答案 1 :(得分:0)
这通常发生在您没有在对象之间使用共享上下文的地方。
您是否使用上下文加载记录,然后将其传递到存储库?
您是否有一个存储库,然后创建一个新的上下文来保存而不是使用父上下文?
我建议您调查一个设计模式,例如“工作单元”模式,您可以在其中使用共享DbContext进行所有查询。