我正在使用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;
...我没有收到错误,但数据库中实际上没有更改该属性。
对于为什么会出现这种情况或进行此更改的正确方法有任何想法?