亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取分離實體的原始值

獲取分離實體的原始值

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 關注
  • 103 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號