C# 审核实体框架操作
请温柔一点,这是我的第一篇帖子,如果我第一次没有掌握正确的术语,很抱歉 在C# 审核实体框架操作,c#,entity-framework,C#,Entity Framework,请温柔一点,这是我的第一篇帖子,如果我第一次没有掌握正确的术语,很抱歉 在实体框架中我需要编写一些审计代码 我有一个context类,它继承了拥有我的数据库的DbContext。 SetInitializer和Mydbset用于每个实体 在我进行审计的地方,我还有一个SaveChanges覆盖 审计分为三个级别,None、Basic和AllProperties,每个实体都分配了不同的属性,在这种情况下,我尝试进行AllProperties审计 这适用于EntityState.Modified,我
实体框架中
我需要编写一些审计代码
我有一个context类,它继承了拥有我的数据库的DbContext
。
SetInitializer
和Mydbset
用于每个实体
在我进行审计的地方,我还有一个SaveChanges覆盖
审计分为三个级别,None、Basic和AllProperties,每个实体都分配了不同的属性,在这种情况下,我尝试进行AllProperties审计
这适用于EntityState.Modified
,我在foreach中使用GetModifiedProperties
为每个修改的属性编写新记录
但是我在对EntityState执行相同操作时遇到了问题。添加了,似乎没有一个等价的GetNewProperties
,我无法循环使用
case AuditType.AllProperties:
{
if (entry.State == EntityState.Modified)
{
foreach (var propertyName in entry.GetModifiedProperties()
.Where(propertyName => propertyName != "Id" && propertyName != "RowVersion"))
{
var original = entry.OriginalValues;
var oldValue = original.GetValue(original.GetOrdinal(propertyName)).ToString();
var current = entry.CurrentValues;
var newValue = current.GetValue(current.GetOrdinal(propertyName)).ToString();
//if (oldValue != newValue) // probably not necessary
//{
AuditTrails.Add(new AuditTrail
{
DomainId = domainId,
Controller = "",
Action = "",
EntityType = entry.Entity.GetType().Name,
EntityId = entityId,
Property = propertyName,
Before = oldValue,
After = newValue
});
}
}
else
{
AuditTrails.Add(new AuditTrail
{
DomainId = domainId,
Controller = "",
Action = "",
EntityType = entry.Entity.GetType().Name,
EntityId = entityId,
EntityValue = entry.Entity.ToString(),
Property = "",
Before = "",
After = entry.State.ToString()
});
}
有人能帮忙吗?每当您调用
entry.OriginalValues
时,您都可以访问属性名称
属性,该属性将为您提供所有属性的列表。因为这是一个新条目,所以它们都是新条目。下面的内容现在对我来说很有用
if (entry.State == EntityState.Added)
{
for (var i = 0; i < entry.CurrentValues.FieldCount; i++)
{
var propertyName = entry.CurrentValues.DataRecordInfo.FieldMetadata[i].FieldType.Name;
if (propertyName == "Id") continue;
if (propertyName == "RowVersion") continue;
AuditTrails.Add(new AuditTrail
{
DomainId = domainId,
Controller = "",
Action = entry.State.ToString(),
EntityType = entityType,
EntityId = entityId,
EntityValue = "", //entityValue,
Property = propertyName,
Before = "",
After = entry.CurrentValues[i].ToString(),
});
}
}
if(entry.State==EntityState.Added)
{
对于(变量i=0;i
只是猜测而已,但新记录它们都是新属性。那么有GetAllProperties或GetProperties吗?