Entity Framework 4.1 Изменение объекта и дочерней коллекции - PullRequest
2 голосов
/ 28 апреля 2011

Если у меня есть объект Book, имеющий дочернюю коллекцию комментариев, могу ли я обновить книгу и список комментариев вместе со структурой сущностей?

Я попытался:не повезло ...

получаю следующую ошибку в первой строке:

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key

1 Ответ

2 голосов
/ 28 апреля 2011

Скорее всего, у вас круговая зависимость (у Книги есть ссылка внешнего ключа на Комментарии, а Комментарии обратно на Книги). В этом случае UpdateTranslator в EF не может определить порядок зависимости. Насколько я могу судить, в этой модели развития нет способа передать подсказку EF, чтобы указать, каков порядок.

Самый распространенный способ решения этой проблемы (который я видел) - это двухфазный коммит. Внесите изменения в книгу, сохраните ее, затем внесите изменения в комментарии и сохраните их. Я обнаружил, что использование подхода Code First позволяет вам быть более точным в отношениях и, таким образом, решить многие проблемы, которые у меня были.

Edit:
Вот пример:

using (var context = new BookContext())
{
    book.Title = "This is the new title";
    context.SaveChanges();

    book.Comments.Add(new Comment("This is a comment"));
    context.SaveChanges();
}

Если существует циклическая зависимость, вы не могли бы выполнить вышеизложенное с помощью одного вызова SaveChanges.

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