EFCore 覆盖 SaveChangesAsync 不保存实体

问题描述 投票:0回答:1
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);

有效 原因是什么?

entity-framework-core
1个回答
0
投票

缺少一个

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.