Pregunta

Estoy usando Entity Framework 4 y tienen una relación de uno a muchos entre un padre y un hijo entidad. Estoy tratando de eliminar a un niño mediante el repositorio padre quitándolo de colección de los niños de los padres:

public virtual void RemoveChild(Child child)
        {
            children.Remove(child);
        }

Cuando intento para guardar los cambios me sale el siguiente error:

Una relación de la 'padre-hijo' AssociationSet está en el 'Borrado' estado. Dadas las restricciones de multiplicidad, un 'niño' correspondiente debe también en el 'Borrada' estado.

Sin duda que no tiene que borrar la entidad secundaria de forma explícita el uso de un repositorio niño!

¿Fue útil?

Solución

Depende de si usted tiene una cascada en el PP. Si lo hace (y, dada su pregunta, es probable que debe), entonces esto debe ser automática. Usted puede leer sobre esto aquí .

Otros consejos

Lo que he encontrado para resolver este problema es la anulación follwoing en el DbContext:

public override int SaveChanges()
{
    Set<Child>()
    .Local
    .Where(r => !Parent.Local.SelectMany(s => s.Children).Contains(r))
    .ToList()
    .ForEach(r => Set<Child>().Remove(r));

    return base.SaveChanges();
}

Tome un vistazo aquí: http://blog.oneunicorn.com/2012/ 06/02 / borrar huérfanos-con-entidad-marco /

En EF4, si los objetos secundarios y el objeto padre están adscritos a la ObjectContext, a continuación, EF mantendrá las referencias de clave externa y de referencias a objetos en la sincronización de los padres y los niños afectados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top