Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Entity Framework/SQL2008 - Wie aktualisiert man LastModified-Felder für Entitäten automatisch?

Ich weiß, dass ich etwas spät zur Party komme, aber ich habe das gerade für ein Projekt gelöst, an dem ich arbeite, und dachte, ich teile meine Lösung.

Um die Lösung besser wiederverwendbar zu machen, habe ich zunächst eine Basisklasse mit den timestamp-Eigenschaften erstellt:

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

Dann habe ich die SaveChanges-Methode in meinem DbContext überschrieben:

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();
    }
}