Объект Entity: клонирование и вставка - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь клонировать / скопировать объект сущности и вставить его в БД.Я использую Entity Framework.

Я нашел несколько похожих вопросов здесь и на других форумах.Хотя точная проблема, ни одно из решений не сработало для меня.

Application orginalApp = new Application().GetById(origAppId);
Application clonedApp = orginalApp.Clone<Application>(); //uses DataContractSerializer
DataBaseContext.Current.Detach(orginalApp); // Current is a property which returns Database context which is stored in httpcontext.current.items

clonedApp.EntityKey = null; // tried with and without this

clonedApp.Application_Id = 0; // tried with and without this. This is the primary key
clonedApp.Application_Name += " (clone)";

clonedApp.Create();   //The usual Addobject and SaveChange()

Это выдает следующую ошибку:

Объект с таким же ключом уже существует в ObjectStateManager.ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.

Я попытался проверить наличие объекта в диспетчере состояний объектов.

DataBaseContext.Current.ObjectStateManager.GetObjectStateEntry(clonedApp)

Это дает мне Null.

* Хотя я не смог найти решение, нашел обходной путь для требования с помощью отражения. *

1 Ответ

0 голосов
/ 16 декабря 2011

Эта ошибка говорит о том, что у вас есть тот же первичный ключ для нового объекта, что и для старого. Если вы клонируете строки, вам потребуется новый PK для клонированной строки

...