2011-05-24 6 views
8

¿Alguien sabe si podemos excluir la columna de la actualización en Entity Framework 4.1 Code First? Por ejemplo, tengo el campo 'CreatedOn' que no quiero incluir cuando hago edit/updates. ¿Es esto posible, es decir, excluir selectivamente el campo de la operación de actualización en EF Code First 4.1?Excluir columna de ser actualizable en Entity Framework 4.1 Código Primero

+0

¿Cómo resolvió esto finalmente? La respuesta solo brinda sugerencias. –

Respuesta

15

Si trabaja con entidades adjuntas, EF generará actualizaciones solo para los campos que hayan cambiado. Si está trabajando con entidades separadas, debe decir de manera manual qué cambió. Si llama a esto:

context.Entry(yourEntity).State = EntityState.Modified; 

está diciendo EF que todas las propiedades deben ser modificadas. Pero si en lugar de llamar a esto:

context.Entry(youreEntity).Property(e => e.SomeProperty).IsModified = true; 

que va a decir que sólo se modifica SomeProperty (sólo esta propiedad estará en la actualización). No estoy seguro si puede hacer la operación inversa marcando toda la entidad como modificada y seleccionando propiedades que no deberían modificarse, pero puede probarlo usted mismo.

Si su CreatedOn se rellena en la base de datos, puede marcarlo como DatabaseGeneratedOption.Identity y su aplicación nunca lo modificará.

+0

¿Hay alguna forma de excluir una columna de select? Tengo una entidad 'User' y quiero que la columna' Password: varbinary (32) 'se seleccione solo bajo demanda, ¿es esto posible? – Shimmy

+2

La operación inversa también funciona (al menos en EF5, donde lo he probado). Esto significa que primero puede llamar a 'context.Entry (yourEntity) .State = EntityState.Modified' y luego a' context.Entry (youreEntity) .Property (e => e.SomeProperty) .IsModified = false' para actualizar todo columnas excepto las que están excluidas manualmente. –

+0

@FlorinDumitrescu: Sí, esto funciona en EF5 con .NET 4.5 pero no con .NET 4.0. –

Cuestiones relacionadas