C# 调用SaveChanges后更新同一实体会导致EF5异常
我有一个实体,我需要保存两次。 第一次是设置ID。 需要填写此ID以计算签名,并且该签名将存储回实体 请参阅以下代码: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.
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在本例中可能是一个打字错误。你是对的,签名是正确的计算也会创建上下文。这是因为实体在计算完成之前已序列化。当需要传输数据时,也会从另一个位置调用此序列化,此时它需要一个上下文来加载其导航属性。