C# 调用SaveChanges后更新同一实体会导致EF5异常

C# 调用SaveChanges后更新同一实体会导致EF5异常,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我有一个实体,我需要保存两次。 第一次是设置ID。 需要填写此ID以计算签名,并且该签名将存储回实体 请参阅以下代码: var newEntity = new MyEntity { \\ set values }; using (var db = MyContainer.CreateContainer()) { db.MyEntity.Add(newEntity); // Call SaveChanges() to set the ID.

我有一个实体,我需要保存两次。 第一次是设置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
}
var newEntity=new MyEntity
{ 
\\设定值
};
使用(var db=MyContainer.CreateContainer())
{
db.MyEntity.Add(新实体);
//调用SaveChanges()设置ID。
db.SaveChanges();
//我需要对实体做一些计算
myEntity.Signature=计算签名(myEntity);

db.SaveChanges();//这通常发生在对象之间未使用共享上下文的情况下

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

您是否有这样一个存储库,它正在创建一个新的上下文来保存,而不是使用父上下文

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


我猜
CalculateSignature
也会创建一个上下文。看看
myEntity
来自哪里?你必须将它重新添加回db上下文,因为
db.myEntity.newEntity
这个不一样。myEntity
@paul在本例中可能是一个打字错误。你是对的,签名是正确的计算也会创建上下文。这是因为实体在计算完成之前已序列化。当需要传输数据时,也会从另一个位置调用此序列化,此时它需要一个上下文来加载其导航属性。