12

Tengo una propiedad DateTime. Necesito que el valor predeterminado de esta propiedad sea DateTime.Now. Y luego descubrí que puede especificar un atributo StoreGeneratedPattern="Computed" y configurarlo en (getdate()) en SQL. Esto funciona con éxito. Pero no puedo cambiar esta propiedad en código. A veces necesito cambiar esta propiedad a cualquier valor de DateTime. Pero mis cambios no se guardan.Entidad framework: StoreGeneratedPattern = Propiedad "computada"

Respuesta

14

Establecer esta propiedad en Computed le dice a EF que no puede establecer el valor directamente. ¿Como pudiste? Esta propiedad existe por el bien de las columnas calculadas, que por definición no se guardan en la base de datos.

Por desgracia, la propiedad "Valor por defecto" de EF sólo puede modificarse con los valores conocidos en tiempo de compilación, por lo que no DateTime.Now

Este enlace proporciona una solución decente:

Setting the default value of a DateTime Property to DateTime.Now inside the System.ComponentModel Default Value Attrbute


También puede manejar el evento SavingChanges en su contexto y agregar valores predeterminados allí, pero eso solo ocurre cuando realmente llama al SaveChanges(), no cuando se crea el objeto.

partial void OnContextCreated() { 
     this.SavingChanges += new EventHandler(AccrualTrackingEntities_SavingChanges); 
    } 

    void AccrualTrackingEntities_SavingChanges(object sender, EventArgs e) { 
     List<Invoice> Invoices = this.ObjectStateManager 
      .GetObjectStateEntries(System.Data.EntityState.Added | System.Data.EntityState.Modified) 
      .Select(entry => entry.Entity) 
      .OfType<Invoice>().ToList(); 

     foreach(Invoice I in Invoices) 
      if (I.EntityState == System.Data.EntityState.Added) { 
       //set default values 
      } else { 
       //?? whatever 
      } 
    } 
Cuestiones relacionadas