sql >> Database teknologi >  >> RDS >> Sqlserver

Entity Framework/SQL2008 - Hvordan opdateres LastModified-felter automatisk for enheder?

Jeg ved godt, at jeg er lidt forsinket til festen, men jeg har lige løst dette for et projekt, jeg arbejder på, og tænkte, at jeg ville dele min løsning.

For det første, for at gøre løsningen mere genbrugelig, oprettede jeg en basisklasse med tidsstempelegenskaberne:

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

Så tilsidesatte jeg SaveChanges-metoden på min 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();
    }
}


  1. MySQL hvordan man ændrer innodb-log-filstørrelse

  2. Sådan installeres PostgreSQL-klientbibliotek til PHP på Windows med SSL aktiveret

  3. Java-hent ResultSet fra SQL Array mislykkes

  4. Er det bedre at bruge INNER JOIN eller EXISTS for at finde tilhørsforhold til flere i m2m forhold?