How to automatically set DateCreated and DateUpdated

If I have the following object:

public class PocoWithDates {
    public string PocoName { get; set; }
    public DateTime DateCreated { get; set; }
   public DateTime DateUpdated { get; set; }
}

matches a SQL Server 2008 (R2) table with the same name / attributes ...

How can I automatically: - Set up the field DateCreatedand DateUpdatedwhen you do INSERT - Now set the field DateUpdatedwhen doing UPDATE

When I speak automatically, I want to say that I want to do this:

poco.Name = "Changing the name";
repository.Save(); 

Not this:

poco.Name = "Changing the name";
poco.LastModified = DateTime.Now;
repository.Save();

Behind the scenes, "something" should automatically update the DateTime fields. What is this "something"? I am using Entity Framework 6.0. Is there a way that EF can do this automatically? I know that MySQL can do something like this. Or using triggers / stored procedures in SQL Server. But I do NOT want this.

: Entity Framework/SQL2008 - LastModified ?

/ EF 4.0. EF6.0 DBContext. , EF6.0. , - , SaveChanges() Add() EF4.0 EF6.0.

+4
3

SaveChanges() DbContext, DateUpdated Save(). , , - .

public interface IEntityAutoDateFields
{
    DateTime DateCreated { get; set; }
    DateTime DateUpdated { get; set; }
}

:

public class PocoWithDates : IEntityAutoDateFields
{
    public PocoWithDates()
    {

    }

    public DateTime DateCreated { get; set; }
    public DateTime DateUpdated { get; set; }
}

:

public PocoWithDatesContext : DbContext
{
     public DbSet<PocoWithDates> PocoWithDatesSet { get; set;}

     public override int SaveChanges()
     {
         var now = DateTime.Now;             

         this.ChangeTracker.DetectChanges();
         foreach (var item in this.ChangeTracker.Entries()
                               .Where(i => i.State == EntityState.Added || i.State == EntityState.Modified)
                               .Where(i => i as IEntityAutoDateFields != null))
         {
             if (item.State == EntityState.Added)
             {
                  (item as IEntityAutoDateFields).DateCreated = now;
             }
             (item as IEntityAutoDateFields).DateUpdated = now;
         }
         // Call the SaveChanges method on the context;
         return base.SaveChanges();
     }
}
+5

Ben Cull . async SaveChangesAsync().

1

public class BaseEntity
{
    public DateTime? DateCreated { get; set; }
    public string UserCreated { get; set; }
    public DateTime? DateModified { get; set; }
    public string UserModified { get; set; }
}

2

public class Student : BaseEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

3 SaveOn() SaveOnSync() DBContext

public class SchoolContext : DbContext
{

public override int SaveChanges()
{
    var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));

    var currentUsername = HttpContext.Current != null && HttpContext.Current.User != null
        ? HttpContext.Current.User.Identity.Name
        : "Anonymous";

    foreach (var entity in entities)
    {
        if (entity.State == EntityState.Added)
        {
            ((BaseEntity)entity.Entity).DateCreated = DateTime.Now;
            ((BaseEntity)entity.Entity).UserCreated = currentUsername;
        }

        ((BaseEntity)entity.Entity).DateModified = DateTime.Now;
        ((BaseEntity)entity.Entity).UserModified = currentUsername;
    }

    return base.SaveChanges();
}
}

public override Task<int> SaveChangesAsync(System.Threading.CancellationToken cancellationToken)

    {
        var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));

        var currentUsername = HttpContext.Current != null && HttpContext.Current.User != null
            ? HttpContext.Current.User.Identity.Name : "Anonymous";


        foreach (var entity in entities)
        {
            if (entity.State == EntityState.Added)
            {
                ((BaseEntity)entity.Entity).DateCreated = DateTime.Now;
                ((BaseEntity)entity.Entity).UserCreated = currentUsername;
            }

            ((BaseEntity)entity.Entity).DateModified = DateTime.Now;
            ((BaseEntity)entity.Entity).UserModified = currentUsername;
        }

        return base.SaveChangesAsync(cancellationToken);
    }
    }
+1

DateCreated/DateUpdated .

public class PocoWithDates {
    public PocoWithDates()
    {
        this.DateCreated = DateTime.Now;
        this.DateUpdated = this.DateCreated;
    }

    public string PocoName { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateUpdated { get; set; }
}

DateUpdated Save(), .

0
source

Source: https://habr.com/ru/post/1527932/


All Articles