Следующий код должен исправить это:
book = db.Books.Single(b => b.BookId == book.BookId);
var bookCopies = db.BookCopies.Where(c => c.BookId == book.BookId).ToList();
foreach (BookCopy c in bookCopies)
{
db.BookCopies.DeleteObject(c);
}
var authors = db.Authors.Include("Books").Where(author => author.Books.Any(b => b.BookId == book.BookId)).ToList();
foreach (Author a in authors)
{
a.Books.Remove(book);
}
db.DeleteObject(book);
db.SaveChanges();
Причина, по которой вы получили ошибку, заключалась в том, что вы не включили отношение Книги при загрузке авторов.Из-за этого вы перебрали коллекцию авторов, где у каждого автора было ноль книг.Удаление книги с помощью a.Books.Remove (книга) ничего не сделало.
Вы могли видеть, что это произошло, когда вы проверили db.ObjectStatemanger.Вы удаляете объекты, но в менеджере состояний ничего не появляется.
Вам также необходимо добавить ToList () к запросам.В противном случае вы будете удалять объекты из той же коллекции, что и итерируете, и это вызовет исключение.