C# 如何解决在实体框架核心中检查字段更改时出现的错误

C# 如何解决在实体框架核心中检查字段更改时出现的错误,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我有以下代码记录保存过程中的更改: foreach (var property in entityEntry.OriginalValues.Properties) { if (!object.Equals(entityEntry.OriginalValues.GetValue<object>(property), entityEntry.CurrentValues.GetValue<object>(property))

我有以下代码记录保存过程中的更改:

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()
                    });
            }
}
当抛出错误时,它会检查第一个字段,它是一个int-Id字段

我该如何解决?我不太明白问题是什么

也许它在实体框架中工作,但现在在EntityFrameworkCore中不工作了吗


更新:突然,我意识到了问题所在。这是一个从API调用添加的实体,状态设置为modified,因此StateTracker中没有原始值。因此,不知何故,我需要获取原始值进行比较,以检查哪些值已更改。

异常来自
GetValue(property)
调用

GetValue
方法的泛型类型参数应为确切的属性类型,即不能用于获取作为
对象的泛型值

相反,您可以使用一个
propertyvalue
对象索引器来实现此目的,例如
entityEntry.OriginalValues[property]
entityEntry.CurrentValues[property]

关于更新。附加实体实例时,
OriginalValues
CurrentValues
将是相同的。在这种情况下,可以使用
GetDatabaseValues
方法调用的结果,而不是
OriginalValues
属性,例如

var originalValues = entityEntry.GetDatabaseValues();
var originalValues = entityEntry.GetDatabaseValues();