2011-01-28 2 views
0

В рамках Entity, пытаясь запустить следующий код:Как избежать раскручивания множественных контекстов в рамках сущности

 using (MyEntities ctx = new myEntities()) 
     { 
      Entity.Customers.Build buildId = new ctx.Build(); 
      buildId.CustomerService = customerService; 
      buildId.datCreatedDate = DateTime.Now; 
      buildId.strBuildSchema = schema; 
      buildId.Status = "Success"; 
      ctx.AddToBuilds(buildId); 
      ctx.SaveChanges(); 
     } 

Результатов в ошибке «объект сущности не могут ссылаться несколькими экземплярами IEntityChangeTracker».

Насколько я могу судить, проблема в том, что объект Build, который я создаю, происходит из нового экземпляра контекста Entity Framework, который отличается от контекста, который выполняет оператор AddToBuilds().

Однако я не могу решить, как преодолеть эту проблему. Кажется, я не могу создать новый Build direct из экземпляра объекта контекста Entity, то есть ctx в коде выше? Есть ли способ сделать это, или я пропустил еще одно очевидное обходное решение?

Приветствие, Matt

ответ

0

Проблема заключается в том, что вы связать объект, который присоединен к контексту, не показан в приведенном выше коды (customerService?) С другим объектом, buildId, который прилагается к ctx , Не делай этого. Используйте один контекст за раз.

0

«customerService» (или, возможно, «схема») относится к другому EntityTracker. Самый простой способ избавиться от этого, чтобы добавить следующую строку кода в код который загружен CustomerService (примечание, что делает предположение о имя класса CustomerService здесь):

ctx.CustomerService.MergeOptions = MergeOptions.NoTracking; 

Эта строка кода говорит контекст «Я не буду вносить какие-либо изменения в объекты CustomerService, поэтому не беспокойтесь о их отслеживании».

Смежные вопросы