是否有一種方法可以在物體框架中呼叫以查看已更改的資料(在記憶體中)并在呼叫 SaveChanges 時將其寫入磁盤?
我想向用戶顯示一些內容,表明存在未保存的更改。表級別還可以,但我更想知道特定欄位/列是否有未保存的更改。
uj5u.com熱心網友回復:
例如,將此方法添加到您的背景關系中:
IEnumerable<(string Key, string Entity, EntityState state,
IEnumerable<(string Property, object OriginalValue, object CurrentValue)> Properties)> GetChanges()
{
var states = new[] { EntityState.Added, EntityState.Modified, EntityState.Deleted };
return this.ChangeTracker.Entries().Where(c => states.Contains(c.State))
.Select(entry =>
(
string.Join(",", entry.Metadata.FindPrimaryKey()
.Properties.Select(p => p.PropertyInfo.GetValue(entry.Entity))),
entry.Metadata.ClrType.Name,
entry.State,
entry.Properties
.Where(p => p.IsModified == (p.EntityEntry.State == EntityState.Modified))
.Select(prop =>
(
prop.Metadata.PropertyInfo.Name,
prop.OriginalValue,
prop.CurrentValue
)
)));
}
它回傳添加、修改或洗掉的物體物件,列出它們的類名(不是表名)和它們的屬性,以及原始值和當前值。還包括鍵值,以便能夠區分相同型別的物件。
在已修改的物體中,僅列出了已更改的屬性。
uj5u.com熱心網友回復:
只需列舉ChangeTracker.Entries即可檢查所有跟蹤的物體及其EntityEntry.State。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407995.html
標籤:
上一篇:EFCore-在SqlServerLocalDb中創建意外的不完整行
下一篇:從查詢中的日期時間中洗掉時間
