Déjame relatar mi experiencia con este error desagradable y señalar el terreno persiguiendo que le llevará más que conduce a una solución tremendamente sencilla.
CompanyGroup es bastante simple. Tiene un nombre y tiene un objeto Company.
empecé con esto:
1 public static void Add(CompanyGroup item)
2 {
3 try
4 {
5 using (Entities scope = new Entities())
6 {
7 scope.AddToCompanyGroup(item);
8 scope.SaveChanges();
9 }
10 }
11 catch (Exception ex)
12 {
13 LogException(ex, item);
14 throw;
15 }
16 }
Y tiene este error:
{"An entity object cannot be referenced by multiple instances of IEntityChangeTracker."}
Por lo tanto, he añadido esto entre las líneas 6 y 7:
(IEntityWithChangeTracker)item).SetChangeTracker(null);
Eso me ha premiado con :
{"The object cannot be added to the ObjectStateManager because it already has an EntityKey. Use ObjectContext.Attach to attach an object that has an existing key."}
Así que cambió
scope.AddToCompanyGroup(item);
a
scope.Attach(item);
Ahora se quejó:
{"An object with a temporary EntityKey value cannot be attached to an object context."}
(empezando a sonar como una de las chicas con las que salía en mi juventud - nunca contenido, pero estoy divagando)
Hice, pues, la clave de entidad nula (no funcionó) y se utilizó el método de crear nueva (no funcionaba, tampoco)
En el camino, me dio este mensaje, también:
{"The source query for this EntityCollection or EntityReference cannot be returned when the related object is in either an added state or a detached state and was not originally retrieved using the NoTracking merge option."}
La solución?
Reemplazar el núcleo, las líneas 7 y 8, con:
CompanyGroup newcg = new CompanyGroup();
newcg.GroupName = item.GroupName;
newcg.Company = scope.Company.Where(c => c.CompanyID == item.Company.CompanyID).First();
scope.AddToCompanyGroup(newcg);
scope.SaveChanges();
Esencialmente, me tomaron los datos que se pasan a través de 'tema', y se trasladó a un objeto del mismo tipo que presenta la misma de nueva creación ámbito como el utilizado en el Agregar.
* "plantilla, ** o algo que haga referencia **" * - Gracias Craig, que acaba de resolverse * otra * Problema de EF para mí (es decir, ¿con qué 10 problemas de EF me has ayudado ahora?). Este error ocurre no solo si la entidad está unida a otro contexto, sino si el objeto * any * referenciado por esta entidad está adjunto a otro contexto. –