【发布时间】:2018-04-12 14:18:32
【问题描述】:
我有这段代码可以在保存期间记录更改:
foreach (var property in entityEntry.OriginalValues.Properties)
{
if (!object.Equals(entityEntry.OriginalValues.GetValue<object>(property),
entityEntry.CurrentValues.GetValue<object>(property)))
{
this.Events.Add(
new Event()
{
AppUserId = this._appUserProvider.CurrentAppUserId,
EventDate = DateTimeOffset.UtcNow,
EventTypeId = eventTypeId,
RecordId = entityEntry.OriginalValues.GetValue<int>("Id"),
ColumnName = property.Name,
OriginalValue =
entityEntry.OriginalValues.GetValue<object>(property) == null
? null
: entityEntry.OriginalValues.GetValue<object>(property).ToString(),
NewValue =
entityEntry.CurrentValues.GetValue<object>(property) == null
? null
: entityEntry.CurrentValues.GetValue<object>(property).ToString()
});
}
}
我从this question得到这个
但是,我在第一行收到错误:
Unable to cast object of type 'System.Func`2[Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry,System.Int32]' to type 'System.Func`2[Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry,System.Object]'.
当错误被抛出时,它会检查第一个字段是 int Id 字段。
我该如何解决?我不太明白问题是什么。
也许它在 Entity Framework 中有效,但现在在 EntityFrameworkCore 中无效?
更新:突然间,我意识到问题出在哪里。这是一个从 API 调用添加的实体,并且状态设置为已修改,因此 StateTracker 中没有原始值。所以不知何故,我需要获取原始值进行比较以检查哪些值已更改。
【问题讨论】:
标签: c# entity-framework entity-framework-core