Entity Framework 4 Delete Object from entity collection

Tengo una Entidad de “Solicitud” con una relación de 1 .. * con la Entidad de “Solicitud de Propiedad”. Entonces, hay una colección de objetos RequestProperty en “Solicitud”. Cuando actualizo una “Solicitud”, deseo eliminar todos los elementos en RequestProperty EntityCollection y agregar los nuevos elementos del objeto de dominio entrante. Cuando repito sobre la colección Request.Properties y llamo un remove o un DeleteObject en el elemento, la enumeración falla porque la colección se ha modificado.

Por ahora estoy haciendo esto:

 while (true) { if (newRequest.Properties.Count > 0) context.RequestPropertySet.DeleteObject(newRequest.Properties.First()); else break; } 

Como esto no es realmente “genial”, pensé que debía haber otra forma de vaciar una colección de una relación. Gracias por tus pensamientos.

La respuesta depende de la forma en que modelaste tus entidades. Si está utilizando una relación independiente común o una relación de clave externa, tendrá que usar su enfoque actual; lo estoy usando también en mi proyecto.

Si definió la relación de identificación, podrá llamar simplemente Clear en la colección como se describe en @Craig. La relación de identificación es una relación especial donde la clave primaria de la entidad dependiente contiene una clave externa de la entidad principal.

Ejemplo de modelo de EF

El ejemplo muestra la entidad Order y la entidad OrderItem con una clave externa que identifica la relación entre ellos. La clave principal de OrderItem consiste en Id único y OrderId que es FK de la tabla Order . Con esta configuración, no necesita iterar a través de OrderItem y eliminar cada elemento por separado. Simplemente eliminar OrderItem de la colección se ejecutará como eliminar en la base de datos y la recostackción de borrado eliminará todos los OrderItem relacionados en la base de datos.

Use el método Clear() :

 newRequest.Properties.Clear();