Si tengo la siguiente entidad:Entity Framework/SQL2008 - ¿Cómo actualizar automáticamente los campos LastModified para Entidades?
public class PocoWithDates
{
public string PocoName { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime LastModified { get; set; }
}
que corresponde a una tabla de SQL Server 2008 con el mismo nombre/atributos ...
¿Cómo puedo automáticamente:
- Establezca el campo CreatedOn/LastModified para el registro en ahora (al hacer INSERT)
- Establecer el campo de última modificación del registro que ahora (cuando se hace ACTUALIZACIÓN)
Cuando digo automáticamente, quiero decir que quiero ser capaz de hacer esto:
poco.Name = "Changing the name";
repository.Save();
No este
:
poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();
Detrás de escena, "algo" debería actualizar automáticamente los campos de fecha y hora. ¿Qué es ese "algo"?
Estoy usando Entity Framework 4.0 - ¿Hay alguna forma en que EF puede hacer eso automáticamente por mí? (Un ajuste especial en el EDMX tal vez?)
Desde el lado de SQL Server, que puede utilizar ValorPredeterminado, pero que sólo funcionará para de INSERT (no ACTUALIZACIÓN 's).
De manera similar, puedo establecer un valor predeterminado usando un constructor en el POCO, pero nuevamente esto solo funcionará al crear una instancia del objeto.
Y, por supuesto, i podría utilizar Disparadores, pero no es ideal.
porque estoy usando Entity Framework, puedo gancho en el SavingChanges evento y actualizar los campos de fecha aquí, pero el problema es que necesito para llegar a ser "consciente" de la POCO de (en este momento, mi repositorio es implementado con genéricos). Tendría que hacer algún tipo de truco OO (como hacer que mi POCO implemente una interfaz, y llamar a un método sobre eso). No estoy en contra de eso, pero si tengo que hacer eso, prefiero configurar manualmente los campos.
Básicamente estoy buscando una solución SQL Server 2008 o Entity Framework 4.0. (o una forma inteligente de .NET)
¿Alguna idea?
EDITAR
Gracias a @marc_s por su respuesta, pero me fui con una solución que es mejor para mi escenario.
simplemente hice esta pregunta de nuevo, pero después de EF6, ya que me encanta esta pregunta y las soluciones ofrecidas, pero los ejemplos de código suministrados no funcionan para EF6.0 como lo están actualmente. – Bart