Hay muchas (y muy buenas y otras por llegar), pero una que me hizo esbozar una pequeña sonrisilla fue la inclusión de las Shadow Properties.
Qué es una Shadow Propery
Una shadow property es una propiedad que no pertenece a nuestra Entidad. Lo primero que se vino a la cabeza son los campos de auditoría que tenemos en las tablas de nuestra base de datos (quién crea, cuándo se crea, quién modifica, cuándo se modifica).
No parece tener mucho sentido andar con estos atributos arriba y abajo en nuestra aplicación cuando realmente no se usan. De esta forma sólo los usaremos cuándo se produzca una actualización de la entidad.
El valor de estas propiedades es mantenido por el Change Tracker API.
Cómo definir una Shadow property
Imaginemos que tenemos este modelo
- public class Orders
- {
- public int ID
- {
- get;
- set;
- }
- public string OrderNumber{
- get;
- set;
- }
- }
- // Definition of DbContext class
- public class MyContext: DbContext
- {
- public DbSet < Orders > Orders {
- get;
- set;
- }
- protected override void OnModelCreating(ModelBuildermodelBuilder)
- {
- }
- }
Lo que tenemos que hacer, sobreescribir el evento OnModelCreating de nuestro dbContext y definir la shadow property
- protected override void OnModelCreating(ModelBuildermodelBuilder)
- {
- modelBuilder.Entity < Orders > ()
- .Property < DateTime > ("CreatedDate");
base.OnModelCreating(builder);- }
Lo que tenemos que hacer, sobreescribir el evento OnModelCreating de nuestro dbContext y definir la shadow property
//Por simplicidad no hago comprobaciones ni miro el estado de la entidadpublicoverrideintSaveChanges(){MyContext.Entry(Orders ).Property("CreatedDate").CurrentValue = DateTime.Now;
returnbase.SaveChanges();}
Aquí os dejo un link con la documentación de Microsoft: EF Core 1.0 Shadow Properties