我有一个应用程序使用EF按预期加载所有数据,但是,当涉及到保存时,我根本无法使用它。
我开始时很简单,只需使用组合框中的值来改变数据库中的1个字段。当值改变时,它执行
this.t.Incident.AssignedTeamID = (int)this.cbTeam.SelectedValue;
我还确认这会将EntityState
更改为Modified
,并且该值正是我所期望的。尽管如此,请致电
hdb.SaveChanges();
不会将任何内容保存回数据库。我知道这可能是我想念的简单事情,但我无法找到它本来就是什么。
更新
在使用SaveChanges之前添加hdb.context.Attach(this.t.Incident);
会导致InvalidOperationException
声明“ IEntityChangeTracker的多个实例无法引用实体对象。”
如果它有所不同,这是桌面应用程序,而不是Web应用程序
答案 0 :(得分:2)
最有可能的是,由于您正在使用Web应用程序,因此您遇到了断开连接的对象上下文的问题。对于所有ORM,您必须通过附加过程来更新实体。 SaveChanges永远不会在请求/响应的两端工作。
答案 1 :(得分:0)
感谢发布在这里的所有人。阅读这些细节后,答案非常简单。
正如Damien对原始问题所评论的那样,我需要做的是确保它全部来自同一个班级。 我当前在需要的时候创建了一个DB的私有实例,而没有真正思考。这很好,它按照我的预期加载了数据,但意味着我将通过不同的类加载大约3个不同的数据库实例。
基本上,我试图使用不同的数据库实例从不同的类中保存对象。将save方法移回到它创建的类(可能就像它应该一直一样)解决了这个问题。