12

J'ai une propriété DateTime. J'ai besoin que la valeur par défaut de cette propriété soit DateTime.Now. Et puis j'ai découvert que vous pouvez spécifier un attribut StoreGeneratedPattern="Computed" et le définir à (getdate()) dans SQL. Cela fonctionne avec succès. Mais je ne peux pas changer cette propriété dans le code. Parfois, j'ai besoin de changer cette propriété à n'importe quelle valeur DateTime. Mais mes changements ne sont pas sauvegardés.Entité framework: StoreGeneratedPattern = Propriété "Computed"

Répondre

14

La définition de cette propriété sur Computed indique à EF que ne peut pas définir directement la valeur. Comment peux-tu? Cette propriété existe pour des colonnes calculées qui, par définition, ne sont pas sauvegardées dans la base de données.

Malheureusement, la propriété « Valeur par défaut » EF ne peut être réglé sur des valeurs connues à la compilation, et donc pas DateTime.Now

Ce lien fournit une solution décente:

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


Vous pouvez également gérer l'événement SavingChanges sur votre contexte et y ajouter des valeurs par défaut, mais cela ne se produit que lorsque vous appelez SaveChanges(), et non lorsque l'objet est créé.

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 
      } 
    } 
Questions connexes