Использование Audit.EntityFramework
Я пытаюсь установить имя связанной сущности в свойствах OriginalValue и NewValue объекта EventEntryChange (и, возможно, также в объекте ColumnValues) . Я пытался использовать параметры «Формат» и «Переопределение» следующим образом (просто упрощенный код, чтобы это показать):
Код: Выделить всё
Audit.EntityFramework.Configuration.Setup()
.ForContext(config => config
.ForEntity(prodConfig =>
{
prodConfig.Format(x => x.ProductType, value =>
{
// Get name from related object
var name = relatedObject?.Name;
return name ?? value;
});
})
);
Код: Выделить всё
///
/// Updates column values and primary keys on the Audit Event after the EF save operation completes.
///
public void UpdateAuditEvent(EntityFrameworkEvent efEvent, IAuditDbContext context)
{
// Update PK and FK
foreach (var efEntry in efEvent.Entries)
{
var entry = efEntry.Entry;
efEntry.PrimaryKey = GetPrimaryKey(context.DbContext, entry);
foreach (var pk in efEntry.PrimaryKey)
{
if (efEntry.ColumnValues.ContainsKey(pk.Key))
{
efEntry.ColumnValues[pk.Key] = pk.Value;
}
}
var fks = GetForeignKeys(context.DbContext, entry);
foreach (var fk in fks)
{
if (efEntry.ColumnValues.ContainsKey(fk.Key))
{
efEntry.ColumnValues[fk.Key] = fk.Value;
}
var change = efEntry.Changes?.FirstOrDefault(e => e.ColumnName == fk.Key);
if (change != null)
{
change.NewValue = fk.Value;
}
}
}
// Update ConnectionId
var clientConnectionId = TryGetClientConnectionId(context.DbContext);
if (clientConnectionId != null)
{
efEvent.ConnectionId = clientConnectionId;
}
}
Источник: https://stackoverflow.com/questions/781 ... -to-a-prop