在我的MVC Core 2应用程序中,我使用Automapper将资源类映射到dto类。
我的某些dto类继承自具有以下属性的基类:
ID
CREATED
UPDATED
我为一个继承的类创建了这种映射:
CreateMap<AnagraficaCompletaResource, ANAGRAFI>()
.ForMember(d => d.CREATED, option => { option.Condition(s => {return (s.ID == 0);}); option.MapFrom(s => DateTime.Now);})
.ForMember(d => d.UPDATED, opt => opt.MapFrom(s => DateTime.Now));
我可以为从基类继承的所有类创建通用映射吗?
我的资源类没有Created和Updated属性。
谢谢。
答案 0 :(得分:1)
通过CREATED
设置UPDATED
和Automapper
是不合理的。首先,Creation Time
应该是将记录保存到数据库中的时间,而不是映射时间,其次,ANAGRAFI
是映射时的新空实例,您将无法决定是创建记录还是创建记录更新操作。
对于标准方式,您可以尝试在SaveChanges
或SaveChangesAsync
期间设置这些字段。
BaseEntity
public class BaseEntity
{
public DateTime? DateCreated { get; set; }
public DateTime? DateModified { get; set; }
}
SchoolContext
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
public override int SaveChanges()
{
SetCreatedAndModified();
return base.SaveChanges();
}
public override async Task<int> SaveChangesAsync()
{
SetCreatedAndModified();
return await base.SaveChangesAsync();
}
private void SetCreatedAndModified()
{
var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));
foreach (var entity in entities)
{
if (entity.State == EntityState.Added)
{
((BaseEntity)entity.Entity).DateCreated = DateTime.UtcNow;
}
((BaseEntity)entity.Entity).DateModified = DateTime.UtcNow;
}
}
}