2011-06-24 40 views
5

soy bastante nuevo en Entity Framework (y asp.net mvc 3) y esta es mi primera experiencia con el código EF4.1 primero.Entity Framework 4.1 Fecha automática

Mi pregunta es simple: cuando se genero a través de un nuevo modelo de mesa para la base de datos que le gustaría hacer

  1. agregar automáticamente la fecha y hora actual en un campo cuando se crea una nueva fila.
  2. Actualice el campo automáticamente cada vez que se actualice el campo.

En realidad, la variable aparece como:

[DisplayName("Data Modifica")] 
[DataType(DataType.DateTime)] 
[DisplayFormat(DataFormatString = "{0:d}")] 
public DateTime DataModifica { get; set; } 

Creo que podría escribir algo en el evento "OnModelCreating" de DataContext pero soy demasiado nuevo para ya dominar este :)

Puede alguien ayuda?

gracias de antemano, V.

Respuesta

10

Eso no tiene nada que ver con la creación del modelo. El "modelo" es una descripción de su mapeo entre clases y base de datos. OnModelCreating se usa para modificar la definición de mapeo, no para modificar datos. No tiene nada que ver con los datos en la instancia de la entidad en sí.

Si desea modificación automática se puede anular SaveChanges:

public override int SaveChanges() 
{ 
    DateTime now = DateTime.Now; 
    foreach (var entity in ChangeTracker.Entries<YourEntityType>() 
             .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified) 
             .Select(e => e.Entity)) 
    { 
      entity.DateModifica = now; // set the date 
    } 

    return base.SaveChanges(); 
} 
+0

Gracias. Eso es exactamente lo que necesito. – Valerio

0

Por qué no define la propiedad de ser uno con un campo de respaldo, que es inicializado con el valor por defecto?

private DateTime _dateOfRequest = DateTime.Today; 
    [Display(Name = "Date of Request"), DataType(DataType.Date)] 
    public System.DateTime DateOfRequest { 
     get { return _dateOfRequest; } 
     set { _dateOfRequest = value; } 
    } 
+2

Creo que el inconveniente de este enfoque sería que la fecha y hora almacenada en el campo indicaría cuándo se creó la instancia, no cuándo se mantuvo en la base de datos. Es una pequeña diferencia, pero podría ser importante, dependiendo de su aplicación. – edsobo

Cuestiones relacionadas