如何解决mvc3 jquery ajax发布错误“ IEntityChangeTracker的多个实例无法引用实体对象”
| 我找到了很多有关此错误的帖子,但没有一个提供帮助,似乎其他人在不同情况下都遇到了此错误。但这是我的第一个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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。