Este error se arroja mucho, pero no puedo encontrar la solución. Soy nuevo en el Marco de la Entidad y en mi primer enfoque obtuve este error.C# Entity Framework "Un objeto de entidad no puede ser referenciado por varias instancias de IEntityChangeTracker"
Esto es lo que tengo. Tengo una clase de empresa y una clase de sucursal. Ambas clases tienen su propio repositorio. Una empresa tiene una sucursal, mientras que una sucursal puede tener varias compañías.
En mi interfaz gráfica de usuario que rellene un combo con objetos Branch, que me sale de mi BranchRepository:
public IList<Branch> GetAllBranches()
{
var query = _context.Branches;
IList<Branch> branches = query.ToList();
return branches;
}
Esto es resultado es el origen de datos del cuadro combinado rama.
Cuando quiero salvar a la compañía, que hacer algo como esto:
company.VisitorAddress = txtVisitAddress.Text;
company.City = txtCity.Text;
company.CompanyName = txtCompany.Text;
company.PhoneNumber = txtPhoneNumber.Text;
company.ZipCode = txtZipcode.Text;
company.Branch = ((Branch)cmbBranches.SelectedItem);
company.Website = txtWebsite.Text;
A continuación, llamar a mi repositorio de empresa para salvar mi empresa. Esto es lo que el método save parece:
public bool Save(Company company)
{
_context.AddToCompanies(company); // <-- This is where the error is thrown.
_context.SaveChanges();
return true;
}
Cuando se invoca el método save, me sale el error 'Un objeto entidad no puede ser referenciado por varias instancias de IEntityChangeTracker'.
Claramente estoy haciendo algo mal, pero ¿qué?
Sí, cada repositorio tiene su propio 'ObjectContext'. Entonces, ¿cómo puedo de una manera ordenada compartir el 'ObjectContext'? ¿Está utilizando un singleton de una buena manera? – Martijn
Ningún singleton no es una buena manera - verifique mi respuesta aquí: http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392 El camino a seguir puede ser pasar la instancia de ObjectContext al repositorio constructor pero luego debe manejar SaveChanges fuera del repositorio. –
Estoy usando winforms. Pero no veo cómo compartir el 'ObjectContext'. No quiero que el cliente conozca este contexto. – Martijn