问题描述
|
我找到了很多有关此错误的帖子,但没有一个提供帮助,似乎其他人在不同情况下都遇到了此错误。但这是我的第一个MVC项目,所以也许我没有得到它:)因此,我有一个非常简单的ajax调用:
$.ajax({
type: \"POST\",url: \"/Home/MyMethod\",data: ({ SomeProperty:\"someValue\" }),success: function (data) {
var obj = jQuery.parseJSON(data);
alert(obj.Status);
},error: function () {
alert(\"error\");
}
});
和非常简单的“ 1”控制器方法:
[HttpPost]
public JsonResult AddReport(MyModel model)
{
if (ModelState.IsValid)
{
db.MyModels.Add(model);
db.SaveChanges();
return Json(...);
}
else
{
//not good...
}
}
行“ 3”触发错误。我在管理区域中有另一个控制器,用于处理相同模型的CRUD操作,并且工作正常。我知道可能的问题是model
已经连接到System.Data.Objects.ObjectContext
,所以我不得不拆开它,但是我不知道该怎么做。有任何想法吗?
解决方法
您的ObjectContext实例在哪里实例化?通常,此错误表明Entity Framework认为另一个ObjectContext已经具有它正在跟踪的该对象的副本。
您是在使用ObjectContext之后处理它们还是将其存储在会话中以供重用?当同一数据集具有多个未处理的ObjectContext时,可能会出现这些类型的问题。
另请参阅http://social.msdn.microsoft.com/Forums/en-IE/adodotnetentityframework/thread/501d7b99-0cb9-44b6-b2cd-16275a151b31。
,我有同样的问题,但原因不同。我在一个新对象中有一个子集合,该子集合中填充了一个在不同上下文中创建的子元素,如下所示:
User newUser = new User
{
UserId = (Guid)user1.ProviderUserKey,Username = user1.UserName,...
AuthorizedOrgs = new List<Org> { currOrg }
};
context.Users.Add(newUser);
currOrg导致错误,因为已在不同的上下文中实例化了该错误。
将其更改为此解决了问题:
User newUser = new User
{
UserId = (Guid)user1.ProviderUserKey,...
AuthorizedOrgs = new List<Org> { context.Orgs.Find(currOrg.Id) }
};
context.Users.Add(newUser);
如您所见,我再次从当前上下文中检索了currOrg。