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。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...