public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
foreach(var entry in base.ChangeTracker.Entries<BaseDateEntity>()
.Where(q => q.State == EntityState.Added || q.State == EntityState.Modified))
{
var dateTime = DateTime.Now;
var persianCalendar = new PersianCalendar();
var year = persianCalendar.GetYear(dateTime);
var month = persianCalendar.GetMonth(dateTime).ToString("D2"); ;
var day = persianCalendar.GetDayOfMonth(dateTime).ToString("D2");
var hour = persianCalendar.GetHour(dateTime).ToString("D2"); ;
var minute = persianCalendar.GetMinute(dateTime).ToString("D2");
if (entry.State == EntityState.Added)
{
entry.Entity.CreatedDateTime = dateTime;
entry.Entity.CreatedTime = $"{hour}:{minute}";
entry.Entity.CreatedDate = int.Parse($"{year}{month}{day}");
}
if (entry.State == EntityState.Modified)
{
entry.Entity.LastModifiedDate = int.Parse($"{year}{month}{day}");
entry.Entity.LastModifiedTime = $"{hour}:{minute}";
}
}
return base.SaveChangesAsync(cancellationToken);
}
我已经重写了 EFCore 的 Savechanges 方法。它不会将实体添加到数据库中。当我将最后一行更改为
var res = base.SaveChangesAsync(cancellationToken).Result;
return Task.FromResult(res);
有效 原因是什么?
缺少一个
await
。只需将其更改为:
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
foreach(var entry in base.ChangeTracker.Entries<BaseDateEntity>()
.Where(q => q.State == EntityState.Added || q.State == EntityState.Modified))
{
var dateTime = DateTime.Now;
var persianCalendar = new PersianCalendar();
var year = persianCalendar.GetYear(dateTime);
var month = persianCalendar.GetMonth(dateTime).ToString("D2"); ;
var day = persianCalendar.GetDayOfMonth(dateTime).ToString("D2");
var hour = persianCalendar.GetHour(dateTime).ToString("D2"); ;
var minute = persianCalendar.GetMinute(dateTime).ToString("D2");
if (entry.State == EntityState.Added)
{
entry.Entity.CreatedDateTime = dateTime;
entry.Entity.CreatedTime = $"{hour}:{minute}";
entry.Entity.CreatedDate = int.Parse($"{year}{month}{day}");
}
if (entry.State == EntityState.Modified)
{
entry.Entity.LastModifiedDate = int.Parse($"{year}{month}{day}");
entry.Entity.LastModifiedTime = $"{hour}:{minute}";
}
}
return await base.SaveChangesAsync(cancellationToken);
}