Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Entity Framework/SQL2008 - Comment mettre à jour automatiquement les champs LastModified pour les entités ?

Je sais que je suis un peu en retard pour la fête, mais je viens de résoudre ce problème pour un projet sur lequel je travaille et j'ai pensé partager ma solution.

Tout d'abord, pour rendre la solution plus réutilisable, j'ai créé une classe de base avec les propriétés d'horodatage :

public class EntityBase
{
    public DateTime? CreatedDate { get; set; }
    public DateTime? LastModifiedDate { get; set; }
}

Ensuite, j'ai remplacé la méthode SaveChanges sur mon DbContext :

public class MyContext : DbContext
{
    public override int SaveChanges()
    {
        ObjectContext context = ((IObjectContextAdapter)this).ObjectContext;

        //Find all Entities that are Added/Modified that inherit from my EntityBase
        IEnumerable<ObjectStateEntry> objectStateEntries =
            from e in context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
            where
                e.IsRelationship == false &&
                e.Entity != null &&
                typeof(EntityBase).IsAssignableFrom(e.Entity.GetType())
            select e;

        var currentTime = DateTime.Now;

        foreach (var entry in objectStateEntries)
        {
            var entityBase = entry.Entity as EntityBase;

            if (entry.State == EntityState.Added)
            {
                entityBase.CreatedDate = currentTime;
            }

            entityBase.LastModifiedDate = currentTime;
        }

        return base.SaveChanges();
    }
}