当用户保存对对象的更改时
myObject
,我想记录更新到该对象的字段。
我可以用
var myObject = await context.MyObjects.SingleAsync(x => x.Id == id);
我知道我可以
IEnumerable<PropertyEntry>
具有
var changes = context.Entry(myObject).Properties.Where(x => x.IsModified);
但在我
changes
列表我在任何地方都看不到字段名。另外,在linqpad中进行成员查询似乎需要2整秒的时间。这似乎不对。
如何完成以下陈述?
Consolse.Write($"The field {what goes here?} was updated from {change.OriginalValue} to {change.CurrentCalue}.");
我发现的其他stackoverflow问题是针对以前版本的实体框架,或者重写
SaveChanges
不要寻找特定的实体。
更新!知道了。
public string GetChangeLog<T>(
ApplicationDbContext context,
T entity)
{
var sb = new StringBuilder();
var changes = context.Entry(entity).Properties.Where(x => x.IsModified);
foreach (var change in changes)
{
var propertyBase = (IPropertyBase)change.Metadata;
sb.Append($"\"{propertyBase.Name}\" was changed from \"{change.OriginalValue}\" to \"{change.CurrentValue}\"\n");
}
return sb.ToString();
}