Сущность с такой же идентичностью уже существует в этом EntitySet - PullRequest
1 голос
/ 09 июля 2011

Я пытаюсь выполнить оператор обновления с помощью WCF RIA Services, но каждый раз, когда я обновляюсь, я получаю сообщение «В этом EntitySet уже существует объект с такой же идентификацией. неправильно?

Шаг 1

LoadOperation<Analysis> AnalysisLP = ((App)Application.Current)._context.
                Load(((App)Application.Current)._context.GetAnalysisQuery().
                Where(o => o.ProjectID == Convert.ToInt32(((App)Application.Current).Project.ProjectID)));

Шаг 2

 AnalysisLP.Completed += delegate
            {
                if (!AnalysisLP.HasError)
                {
                    Analysis = AnalysisLP.Entities.FirstOrDefault();
};

Шаг 3

         ((App)Application.Current)._context.Analysis.Attach(Analysis);
         ((App)Application.Current)._context.SubmitChanges(OnSubmitCompleted, null);

Кто-нибудь может мне помочь, что я делаю не так? спасибо

Ответы [ 2 ]

4 голосов
/ 09 июля 2011

Ваш объект Analysis поступает из EntitySet через запрос, но все еще привязан к этому EntitySet.

Вам просто нужно изменить его свойства и вызвать SubmitChanges.Не пытайтесь прикрепить его снова.

1 голос
/ 03 октября 2012

Во избежание исключения «Объект с таким же идентификатором уже существует в EntitySet», объекты, которые обновляются, модифицируются или удаляются, всегда должны полностью обновляться с сервера при сохранении, в памяти не должно быть никаких ссылок на предыдущий экземпляры сущностей. Чтобы предотвратить зависание экземпляров, я следую этим правилам:

Экземпляры сущностей не должны иметь каких-либо измененных свойств обработчиков событий, назначенных непосредственно им, вместо этого следует использовать частичные методы OnCreated или OnPropertyNameChanged.

Когда сущности добавляются в EntitySet, не назначайте родительские ссылки на экземпляры Entity, вместо этого используйте свойство идентификатора внешнего ключа (myEntity.ParentalID = SelectedParent.ParentalID, а не myEntity.Parent = SelectedParent), поскольку SelectedParent, вероятно, не получает перезагружен при сохранении, поскольку он не является частью единицы работы, поэтому ссылка будет сохранена после сохранения и обновления.

Любые поля со списком, которые используются в качестве источников заполнения для свойств объекта, должны быть перезагружены и после сохранения их EntitySet; в противном случае те связанные сущности, которые заполняют комбо, будут содержать ссылки на предыдущий экземпляр сущности.

...