mvc3 jquery ajax post error «На объект сущности нельзя ссылаться несколькими экземплярами IEntityChangeTracker». - PullRequest
0 голосов
/ 26 мая 2011

Я нашел много сообщений об этой ошибке, но ни один из них не помог, похоже, что все остальные получили эту ошибку в другой ситуации. Но это мой первый проект 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");
                }
            });

и очень простой MyMethod метод контроллера:

        [HttpPost]
        public JsonResult AddReport(MyModel model)
        {
            if (ModelState.IsValid)
            {
                db.MyModels.Add(model);
                db.SaveChanges();
                return Json(...);
            }
            else
            {
                //not good...
            }
        }

строка db.MyModels.Add(model); вызывает ошибку. У меня есть другой контроллер в области администратора, который обрабатывает операции CRUD для той же модели, и он работает просто отлично. Я знаю, что, вероятно, проблема в том, что model уже присоединен к System.Data.Objects.ObjectContext, и я должен отсоединить его, но я не знаю, как это сделать. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2012

У меня была та же проблема, но по другой причине. У меня была дочерняя коллекция в новом объекте, который заполнялся дочерним объектом, который был создан в другом контексте, подобном этому:

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,
    Username = user1.UserName,
               ...
    AuthorizedOrgs = new List<Org> { context.Orgs.Find(currOrg.Id) }
};

context.Users.Add(newUser);

Как видите, я снова извлек currOrg из текущего контекста.

0 голосов
/ 26 мая 2011

Где создается экземпляр вашего ObjectContext?Обычно эта ошибка указывает, что Entity Framework считает, что другой ObjectContext уже имеет копию того объекта, который он отслеживает.

Вы избавляетесь от своих ObjectContexts после их использования или сохраняете в сеансе для повторного использования?Эти типы проблем могут возникать, когда у вас есть несколько недоставленных ObjectContexts для одного и того же набора данных.

Также см. http://social.msdn.microsoft.com/Forums/en-IE/adodotnetentityframework/thread/501d7b99-0cb9-44b6-b2cd-16275a151b31 для некоторых ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...