2011-06-08 56 views
1

我有一个应用程序,使用EF加载所有预期的数据,但是,当涉及到保存时,我根本无法使它工作。SaveChanges不保存更改

我已经开始简单了,只需使用组合框中的值来更改数据库中的1字段即可。当值发生变化时,它执行

this.t.Incident.AssignedTeamID = (int)this.cbTeam.SelectedValue; 

我也确认这改变了EntityStateModified和值是什么,我希望它是。尽管如此,呼叫

hdb.SaveChanges(); 

不保存任何东西回数据库。我知道这可能是我错过的简单东西,但我无法找出那是什么。

更新:“一个实体对象不能被IEntityChangeTracker的多个实例引用 使用的SaveChanges导致一个InvalidOperationException说以前添加hdb.context.Attach(this.t.Incident);

如果这有什么差别,这是一个桌面应用程序,而不是一个Web应用程序

+0

您是否使用依赖注入? – Chev 2011-06-08 03:03:29

+0

您使用交易吗? – 2011-06-08 07:28:52

+0

从这个错误信息中,我猜你会从不同于'hdb'的上下文中加载事件。那可能吗? – 2011-06-08 09:38:28

回答

2

最有可能的,因为你正在使用一个web应用程序,你有一个断开obect上下文的问题。对于所有的ORM,您必须通过附加过程来更新实体。 SaveChanges永远不会在请求/响应的两端工作。

+0

检查您的对象是否已附加到上下文。 – Brownman98 2011-06-08 01:13:14

+0

我已经添加了对原始问题的更新。附加对象会导致无效的操作异常 – Joeb454 2011-06-08 09:35:35

0

谢谢大家谁张贴在这里。阅读这些细节后,答案非常简单。

作为达米安对原始问题的评论,我需要做的是确保它全部来自同一个班级。 我目前在需要时创建了数据库的私有实例,但没有真正想到。这很好,它按我的预期加载了数据,但意味着我将通过不同的类加载大约3个不同的数据库实例。

本质上,我试图用另一个不同的数据库实例保存对象。将save方法移回到它创建的类中(大概就像它本来应该一直这样做的)来解决问题。