Как с помощью Audit.EntityFramework установить значения внешнего ключа для свойства связанной сущности?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как с помощью Audit.EntityFramework установить значения внешнего ключа для свойства связанной сущности?

Сообщение Anonymous »


Использование 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;
});
})
);
In both cases, it will replace the OriginalValue with the updated value, but the NewValue and ColumnValues entry get reset to the foreign key ID. This is because of this code in DbContextHelper:

Код: Выделить всё

    /// 
/// 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;
}
}
In all honesty, I'm not really sure why it is doing this with the audit entry, but I'm sure there's a reason. However, I'm still stuck trying to figure out how I can get that logging to work, or even something similar (e.g. adding a separate change that holds the Name of the linked entity) that would fit my needs.


Источник: https://stackoverflow.com/questions/781 ... -to-a-prop
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Аудит в .NET 6 с помощью библиотеки Audit.NET и Audit.NET.Serilog.
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Почему EntityFramework 6.1 работает лучше, чем EntityFramework Core 8, при простом запросе выбора? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Почему EntityFramework 6.1 работает лучше, чем EntityFramework Core 8, при простом запросе выбора? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Тип сущности «Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin» требует определения ключа.
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Тип сущности «Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin» требует определения ключа.
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»