0

我有一个需要保存两次的实体。第一次是设置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.

我不明白,我不允许我两次保存同一个实体吗?我将如何实现这一目标?

4

2 回答 2

2

我猜这也CalculateSignature创造了一个背景。看看实体框架多对象上下文

于 2012-10-05T13:20:38.643 回答
0

这通常发生在您没有在对象之间使用共享上下文的情况下。

您是否加载带有上下文的记录,然后将其传递到存储库?

您是否有一个存储库,然后创建一个新的上下文来保存而不是使用父上下文?

我建议研究一种设计模式,例如“工作单元”模式,在该模式中,您对所有查询都使用共享的 DbContext。

http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx

于 2012-10-05T13:20:17.613 回答