为了账号安全,请及时绑定邮箱和手机立即绑定

获取分离实体的原始值

获取分离实体的原始值

C#
慕哥9229398 2022-12-24 11:01:13
我有一个使用 ASP.NET CORE 构建的 API。在它像这样将数据发送到客户端应用程序(JS web 应用程序)之后:public IEnumerable<Article> GetAvaliableArticles(){    ThrowIfDisposed();    return Entities.Where(s => s.IsAvailable).OrderBy(x => x.DisplayOrder);}当客户端应用程序想要更新每篇文章时,我将实体附加回上下文:Context.Attach(entity);if(entity.GetType().GetProperty("ConcurrencyStamp") != null) {    var propertyInfo = entity.GetType().GetProperty("ConcurrencyStamp");    propertyInfo.SetValue(entity, Guid.NewGuid().ToString());}Context.Update(entity);await Context.SaveChangesAsync(cancellationToken);但是,当我尝试审核 EF 中的更改时,它没有获得 Article 的先前值。原始值和新值相同。switch (entry.State) {    case EntityState.Added:        auditEntry.NewValues[propertyName] = property.CurrentValue;        break;    case EntityState.Deleted:        auditEntry.OldValues[propertyName] = property.OriginalValue;        break;    case EntityState.Modified:        if (property.IsModified)         {            auditEntry.OldValues[propertyName] = property.OriginalValue;            auditEntry.NewValues[propertyName] = property.CurrentValue;        }        break;}我想property.OriginalValue成为更新前的先前值。
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

对于Context.Attach(entity);,默认值或原始值来自entity您从客户端传递的而不是查询数据库。


作为解决方法,您可以尝试entry.GetDatabaseValues().GetValue<object>(property.Metadata.Name)获取数据库的原始值。


public override int SaveChanges()

{

    ChangeTracker.DetectChanges();

    var entries = ChangeTracker.Entries().Where(e => !(e.Entity is Audit) && e.State != EntityState.Detached && e.State != EntityState.Unchanged);

    foreach (var entry in entries)

    {

        switch (entry.State)

        {                    

            case EntityState.Modified:

                foreach (var property in entry.Properties)

                {

                    if (property.IsModified)

                    {

                        var original = entry.GetDatabaseValues().GetValue<object>(property.Metadata.Name);

                        var current = property.CurrentValue;

                    }

                }

                break;

        }

    }

    return base.SaveChanges();

}


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号