2011-06-24 2 views
5

Je suis assez nouveau à Entity Framework (et asp.net mvc 3) et c'est ma première expérience avec le code EF4.1 en premier.Entity Framework 4.1 Date automatique

Ma question est simple: quand je produis par modèle une nouvelle table pour la base de données Je voudrais faire

  1. ajouter automatiquement datetime courant dans un champ lorsqu'une nouvelle ligne est créée.
  2. Mettre automatiquement à jour le champ chaque fois que le champ est mis à jour.

En fait, la variable apparaît comme:

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

Je suppose que je pourrais écrire quelque chose sur événement "OnModelCreating" de datacontext mais je suis trop nouveau pour maîtriser déjà ça :)

Can Quelqu'un aide?

merci à l'avance, V.

Répondre

10

Cela n'a rien à voir avec la création du modèle. Le "modèle" est la description de votre correspondance entre les classes et la base de données. OnModelCreating est utilisé pour modifier la définition de mappage, pas pour modifier les données. Cela n'a rien à voir avec les données de l'instance d'entité elle-même.

Si vous souhaitez modification automatique vous pouvez remplacer 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

Merci. C'est exactement ce dont j'ai besoin. – Valerio

0

Pourquoi ne pas définir la propriété d'être un avec un champ de support, qui est initialisé à la valeur par défaut?

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

Je pense que l'inconvénient de cette approche serait que le datetime stocké dans le champ indiquerait quand l'instance a été créée, pas quand elle a été persistée dans la base de données. C'est une petite différence, mais cela pourrait être important, en fonction de votre application. – edsobo

Questions connexes