Ошибка сохранения/обновления для сущностей с отношением "многие ко многим"

Я работаю над первым подходом к базе данных с Entity Framework 4.1. У меня есть 2 связанных между собой объекта Book и Library. У меня также есть одна соединительная таблица с 10 столбцами для хранения информации о конкретной копии книги в библиотеке с отношением один ко многим как с объектами BOOK, так и с LIBRARY. Я создал представление, которое отправляет объект JSON с дочерним объектом в нем, который соответствует определению моего BookVieMOdel. Представление работает нормально, но у меня возникают проблемы с добавлением новых записей в таблицу соединений в контроллере. Я получаю сообщение об ошибке "Добавление связи с объектом, находящимся в состоянии "Удалено", не разрешено". Я предполагаю, что ошибка относится к удаленному объекту, который был удален, когда book.LibraryBookCopies.Clear();, но не могу думать о том, чтобы сделать это по-другому.

Спасибо,

КОНТРОЛЛЕР:

[HttpPost]
    public ActionResult Edit(BookViewModel bookv)
    {

        Mapper.CreateMap< BookViewModel,Book>();

        Book  book = Mapper.Map<BookViewModel,Book>(bookv);

        db.Books.Attach(book);

        db.ObjectStateManager.ChangeObjectState(book, EntityState.Modified);

        //Add library ref to each libraryBookCopies object in Book
        foreach (LibraryBookCopy lBC in book.LibraryBookCopies)
        {
            lBC.Library = db.Libraries.Single(l => l.LibraryId == lBC.LibraryId);
        }

        //Remove all currently related records
        book.LibraryBookCopies.Clear();

        //Add copies from ViewModel to book object
        foreach (LibraryBookCopy lBC in bookv.LibraryBookCopies)
        {      book.LibraryBookCopies.Add(lBC); //Error here      }

        db.SaveChanges();

        return RedirectToAction("Index");     
    }

person Bishnu Paudel    schedule 03.07.2012    source источник


Ответы (2)


Вы сказали, что ошибка «объект, который находится в состоянии «Удалено», не разрешен». Мне интересно, есть ли проблемы с WillCascadeOnDelete и что Книга удаляется. См. http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part-3-one-to-one-foreign-key-associations.aspx

person melutovich    schedule 29.08.2012

Может, попробовать сохранить изменения перед добавлением новых записей?

//Remove all currently related records
book.LibraryBookCopies.Clear();
db.SaveChanges();

//Add copies from ViewModel to book object
foreach (LibraryBookCopy lBC in bookv.LibraryBookCopies)
{      book.LibraryBookCopies.Add(lBC); //Error here      }
person Vasile Laur    schedule 03.07.2012
comment
Спасибо, но это не помогло. И я не очень хочу иметь несколько обращений к базе данных для сохранения. - person Bishnu Paudel; 03.07.2012