MVC&LINQ (Не удается присоединить уже существующий объект.)
От: Axis  
Дата: 11.10.10 07:58
Оценка:
Доброго времени суток. Недавно начал разбиратся с данной платформой, наткнулся на такую проблему:

Во время выполнения следующего кода выскакивает исключение


// Обновление существующей записи или добавление новой

//Ищим запись по двум признакам
                var resultChar=_EVECharsRepository.EVEChars.Where(x=>x.EVECharID==item.CharacterID);   
                if (resultChar.Count() < 1)
                {
                    resultChar = _EVECharsRepository.EVEChars.Where(x => x.Name == item.Name);
                }
                EVEChar eveChar = null;
                if (resultChar.Count() < 1) // Проверяем было ли чтонибудь найдено
                {
                    eveChar = new EVEChar(); // создаём новый объект
                }
                else
                {
                    eveChar = resultChar.First(); // получаем существующий
                }
                eveChar.Description = DateTime.Now.ToString();  //обновляем данные
                _EVECharsRepository.SaveEVEChar(eveChar);                // фиксируем изменения



        public void SaveEVEChar(Entities.EVEChar eveChar)
        {

            if (eveChar.CharID == 0) // если ид 0 добавляем новую запись
                _EVECharsTable.InsertOnSubmit(eveChar);
            else
            { // если ид не нулевой обновляем запись
                _EVECharsTable.Attach(eveChar);
                _EVECharsTable.Context.Refresh(RefreshMode.KeepCurrentValues, eveChar);
            }
            _EVECharsTable.Context.SubmitChanges(); // фиксируем изменения
        }


Новая запись добавляется без проблем, а вот при фиксации изменений существующей вылетает исключение на этой строке:

  _EVECharsTable.Attach(eveChar);


Собстно само исключение:

Не удается присоединить уже существующий объект.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Не удается присоединить уже существующий объект.

Source Error: 


Line 32:             else
Line 33:             {
Line 34:                 _EVECharsTable.Attach(eveChar);
Line 35:                 _EVECharsTable.Context.Refresh(RefreshMode.KeepCurrentValues, eveChar);
Line 36:             }



Однако такая конструкция работает замечательно:

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Edit(long ID)
        {
            EVEChar eveChar = (from p in _EVECharsRepository.EVEChars
                               where p.CharID == ID
                               select p).First();
            return View(eveChar);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(EVEChar eveChar)
        {
            if (ModelState.IsValid)
            {
                _EVECharsRepository.SaveEVEChar(eveChar);
                TempData["message"] = eveChar.Name + " has beer saved.";
                return RedirectToAction("Index");
            }
            else
            {
                return View(eveChar);
            }
        }

Подскажите в чем может быть проблема?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.