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();