Adding CreatedDate to an entity using Entity Framework 5 Code First

后端 未结 7 503
心在旅途
心在旅途 2020-12-13 02:24

I am trying to add a CreatedDate property to entities in my Model and am using EF5 Code First. I want this date to not be changed once set, I want it to be a UT

7条回答
  •  执笔经年
    2020-12-13 03:02

    Similar to Stephans's Answer but with Reflection and also ignores all user (external) updates Created/Updated times. Show Gist

      public override int SaveChanges()
            {
                foreach (var entry in ChangeTracker.Entries().Where(x => x.Entity.GetType().GetProperty("CreatedTime") != null))
                {
                    if (entry.State == EntityState.Added)
                    {
                        entry.Property("CreatedTime").CurrentValue = DateTime.Now;
                    }
                    else if (entry.State == EntityState.Modified)
                    {
                        // Ignore the CreatedTime updates on Modified entities. 
                        entry.Property("CreatedTime").IsModified = false;
                    }
    
                    // Always set UpdatedTime. Assuming all entities having CreatedTime property
                    // Also have UpdatedTime
                    // entry.Property("UpdatedTime").CurrentValue = DateTime.Now;
                    // I moved this part to another foreach loop
                }
    
                foreach (var entry in ChangeTracker.Entries().Where(
                    e => 
                        e.Entity.GetType().GetProperty("UpdatedTime") != null && 
                        e.State == EntityState.Modified || 
                        e.State == EntityState.Added))
                {
                    entry.Property("UpdatedTime").CurrentValue = DateTime.Now;
                }
    
                return base.SaveChanges();
            }
    

提交回复
热议问题