ventajas tutorial mvc framework first espaƱol desventajas curso code c# entity-framework

tutorial - Entity Framework de C#"Un objeto de entidad no puede ser referenciado por varias instancias de IEntityChangeTracker"



entity framework database first (1)

Este error se produce mucho, pero no puedo encontrar la solución. Soy nuevo en Entity Framework y en mi primer enfoque obtuve este error.

Esto es lo que tengo. Tengo una clase de empresa y una clase de rama. Ambas clases tienen su propio repositorio. Una empresa tiene una sucursal, mientras que una puede tener varias empresas.

En mi GUI lleno un combo con objetos de Branch, que obtengo de mi BranchRepository:

public IList<Branch> GetAllBranches() { var query = _context.Branches; IList<Branch> branches = query.ToList(); return branches; }

Este es el resultado es el origen de datos del cuadro combinado de rama.

Cuando quiero salvar a la empresa, hago 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;

Luego, llamo al repositorio de mi compañía para salvar a mi compañía. Aquí es cómo se ve el método de guardar:

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 de guardar, aparece el error ''Un objeto de entidad no puede ser referenciado por varias instancias de IEntityChangeTracker''.

Claramente estoy haciendo algo mal, pero ¿qué?


¿ ObjectContext nueva instancia de ObjectContext para cada tu repositorio? Esto podría ser una fuente de problemas porque cuando agrega Branche a la Compañía, intenta agregarlo a la instancia de ObjectContext , que no se puede hacer porque aún está relacionado con la instancia de ObjectContext usa para llenar el cuadro combinado. El camino a seguir es compartir la instancia de ObjectContext entre sus repositorios. Otra posibilidad es Detach Branch del primer repositorio, pero puede tener otras consecuencias.