我很难通过新的上下文对实体对象进行更改。我以前做过很多次这项工作,但在这种情况下,我得到了旧的“ObjectContext 实例已被处理”异常。
这是我的快速编辑/保存代码:
private void SaveChanges()
{
using (var context = new Manticore.ManticoreContext(Global.ManticoreClient))
{
**context.AttachTo("Users", Global.LoggedInUser);**
Global.LoggedInUser.FirstName = this.FirstNameText.Text;
Global.LoggedInUser.LastName = this.LastNameText.Text;
Global.LoggedInUser.Email = this.EmailText.Text;
context.SaveChanges();
}
}
Global.LoggedInUser 属性(已实例化):
public static Manticore.User LoggedInUser
{
get
{
return HttpContext.Current.Session["LoggedInUser"] as Manticore.User;
}
set
{
HttpContext.Current.Session["LoggedInUser"] = value;
}
}
最重要的是这里有一个可以工作的快速单元测试(现在没有断言,但没有抛出异常):
private User _testUser;
private TestInstanceBucket _testBucket;
[TestInitialize]
public void TestInitialize()
{
using (var context = new Manticore.ManticoreContext())
{
this._testBucket = new TestInstanceBucket(context);
this._testUser = this._testBucket.TestUser;
context.AddObject("Users", this._testUser);
context.SaveChanges();
}
}
[TestMethod]
public void User_ShouldBeAbleToChangeDetails()
{
using (var context = new ManticoreContext())
{
context.AttachTo("Users", this._testUser);
this._testUser.FirstName = "New";
context.SaveChanges();
}
}
就像我说的,我以前做过这样的代码,而且很好。我是否走运了,或者将实体存储在会话中会导致问题?
更新
我已将代码从全局移动到使用 SaveChanges() 的页面继承的页面基类。同样的问题,所以它规则我们的静态类/方法并将实体存储在会话中以某种方式导致问题。
更新
所以,在我的头撞到墙上几个小时后,我有了一个相当简单的修复,如果烦人的话。在初始获取用户之后,我现在调用
context.Detach(user);
我只能假设与测试环境相比,ASP.NET 中垃圾收集处理上下文的速度有多快。