" ObjectContext可能处于不一致状态"在更新预先加载的导航属性之后

时间:2014-04-02 22:56:22

标签: c# entity-framework ninject entity-framework-6 navigation-properties

我正在使用Entity Framework 6和Ninject。我通过其存储库加载父属性,该存储库使用预先加载来填充子属性,并尝试通过更改Id来更新此子属性。在我的代码的其他地方,EF正确地指出,当更新此Id时,还需要更新相关的导航属性。

例如

public class Foo
{
   public int SubFooId { get; set; }

   //Navigation Properties:

   [JsonIgnore]
   public virtual Subfoo Subfoo { get; set; }
}

//Uses eager loading [ .Include("Subfoo") ] to populate Subfoo
var foo = container.Get<FooRepository>().FindByIdUseEagerLoad(1);

foo.SubFooId = 2;

container.Get<FooRepository>().Write(foo);
container.Get<MyContext>().CommitToDatabase();

但是,在提交此更改时,我收到以下错误:

  

已成功提交对数据库的更改,但更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。内部异常消息:发生了引用完整性约束违规:定义引用约束的属性值在关系中的主体和从属对象之间不一致

如果我改为直接更新属性:

var newFoo = new Foo() { ... };
foo = newFoo;

...我没有收到错误,但数据库中实际上没有更改该属性。

对于为什么会出现这种情况或进行此更改的正确方法有任何想法?

0 个答案:

没有答案