Skip to content

Instantly share code, notes, and snippets.

@yuv4ik
Last active August 23, 2017 06:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yuv4ik/a86954fe4c18c4fdbf38ea5ed2f52c09 to your computer and use it in GitHub Desktop.
Save yuv4ik/a86954fe4c18c4fdbf38ea5ed2f52c09 to your computer and use it in GitHub Desktop.
EntityFramework database first => generalising timestamps
namespace SameNameSpaceAsAutoGeneratedDbContext
{
public interface IEntity
{
int Id { get; set; }
DateTime CreatedAt { get; set; }
DateTime? UpdatedAt { get; set; }
DateTime? DeletedAt { get; set; }
}
public partial class Customer : IEntity {}
public partial class Product : IEntity {}
}
namespace SameNameSpaceAsAutoGeneratedDbContext
{
public partial class MyDbContext
{
public override Task<int> SaveChangesAsync()
{
AddTimestamps();
return await base.SaveChangesAsync();
}
private void AddTimestamps()
{
var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified || x.State == EntityState.Deleted));
foreach (var entity in entities)
{
switch(entity.State)
{
case EntityState.Added:
((BaseEntity)entity.Entity).CreatedAt = DateTime.UtcNow;
break;
case EntityState.Modified:
((BaseEntity)entity.Entity).UpdatedAt = DateTime.UtcNow;
break;
case EntityState.Deleted:
(BaseEntity)entity.Entity).DeletedAt = DateTime.UtcNow;
break;
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment