Tôi biết mình đến bữa tiệc hơi muộn, nhưng tôi vừa giải quyết vấn đề này cho một dự án mà tôi đang thực hiện và nghĩ rằng tôi sẽ chia sẻ giải pháp của mình.
Đầu tiên, để làm cho giải pháp có thể tái sử dụng nhiều hơn, tôi đã tạo một lớp cơ sở với các thuộc tính dấu thời gian:
public class EntityBase
{
public DateTime? CreatedDate { get; set; }
public DateTime? LastModifiedDate { get; set; }
}
Sau đó, tôi ghi đè phương thức SaveChanges trên DbContext của mình:
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();
}
}