本文整理汇总了C#中DbContext.GetEntityKey方法的典型用法代码示例。如果您正苦于以下问题:C# DbContext.GetEntityKey方法的具体用法?C# DbContext.GetEntityKey怎么用?C# DbContext.GetEntityKey使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DbContext
的用法示例。
在下文中一共展示了DbContext.GetEntityKey方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ApplyAuditLog
public void ApplyAuditLog(DbContext workingContext, DbEntityEntry entry, LogOperation logOperation)
{
var includedProperties = new List<string>();
var entityKey = workingContext.GetEntityKey(entry.Entity);
var entityType = entry.Entity.GetType();
if (entry.IsAttr<AuditableAttribute>())
{
var props = entityType.GetProperties().Where(pi => !pi.IsAttr<NotAuditableAttrubute>());
includedProperties.AddRange(props.Select(pi => pi.Name));
}
else
{
var props = entityType.GetProperties()
.Where(p => p.IsAttr<AuditableAttribute>() && !p.IsAttr<NotAuditableAttrubute>());
includedProperties.AddRange(props.Select(pi => pi.Name));
}
if (entry.State == EntityState.Modified)
{
var originalValues = workingContext.Entry(entry.Entity).GetDatabaseValues();
var changedProperties = (from propertyName in originalValues.PropertyNames
let propertyEntry = entry.Property(propertyName)
let currentValue = propertyEntry.CurrentValue
let originalValue = originalValues[propertyName]
where (!Equals(currentValue, originalValue) && includedProperties.Contains(propertyName))
select new ChangedProperty
{
Name = propertyName,
CurrentValue = currentValue,
OriginalValue = originalValue
}).ToArray();
if (changedProperties.Any())
{
foreach (var log in changedProperties.Select(changedProperty => new AuditLog
{
Created = DateTime.Now,
EntityFullName = entry.Entity.GetType().FullName,
Entity = Utils.Serialize(entry.Entity),
EntityIdBytes = Utils.Serialize(entry.Entity),
Operation = logOperation,
OldValue = changedProperty.OriginalValue.ToString(),
NewValue = changedProperty.CurrentValue.ToString(),
PropertyName = changedProperty.Name
}))
{
AuditLogs.Add(log);
}
SaveChanges();
}
}
else
{
var log = new AuditLog
{
Created = DateTime.Now,
EntityFullName = entry.Entity.GetType().FullName,
Entity = Utils.Serialize(entry.Entity),
EntityIdBytes = Utils.Serialize(entityKey),
Operation = logOperation,
};
AuditLogs.Add(log);
SaveChanges();
}
}