как реализовать пользовательское поле с помощью Audit.Net entityframework - PullRequest
1 голос
/ 25 марта 2019

Я новичок в Audit.net. Я успешно настроил его в своем проекте.

Но теперь мне нужно расширить его, чтобы сохранить дополнительную информацию, такую ​​как requestterID и комментарий, на странице просмотра.

мой случай: Сущность сопоставлена ​​с Entity_AT

Entity {
    [Key]
    int     ID
    string  label
}
Entity_AT {
    [Key]
    int      ATID
    int      ID
    string   label
    int      ATFlag
    datetime ATCreationDate
    string   RequesterID
    string   ATComment
}
public void Add(TEntity obj, string RequesterId)
{
   _dbSet.Add(obj);
   _context.SaveChanges();
}
[AuditDbContext(Mode = AuditOptionMode.OptOut, IncludeEntityObjects = false, AuditEventType = "{database}_{context}")]
public class MyDBContext : AuditIdentityDbContext<ApplicationUser>
{
}
Audit.Core.Configuration.DataProvider = new EntityFrameworkDataProvider()
{
    AuditTypeMapper = t => t == typeof(Entity) ? typeof(Entity_AT) : null,
    AuditEntityAction = (evt, entry, auditEntity) =>
    {
        var a = (dynamic)auditEntity;
        a.ATCreationDate = DateTime.UtcNow;
        a.ATFlag = (entry.Action == "Insert") ? 1 : (entry.Action == "Update") ? 2 : (entry.Action == "Delete") ? 3 : 0;

        return true; // return false to ignore the audit
    }
};

Я пытался:

_context.AddAuditCustomField("RequesterId", requesterId);
_context.AddAuditCustomField("ATComment", "pippo");

_dbSet.Add(obj);
_context.SaveChanges();

но без результатов

1 Ответ

0 голосов
/ 26 марта 2019

Вы добавили настраиваемое поле "RequesterId" в AuditEvent, но не сопоставляете его со свойством AuditEntity.

В действии сущности необходимо выполнить следующее:

Audit.Core.Configuration.DataProvider = new EntityFrameworkDataProvider()
{
    AuditTypeMapper = t => t == typeof(Entity) ? typeof(Entity_AT) : null,
    AuditEntityAction = (evt, entry, auditEntity) =>
    {
        var a = (dynamic)auditEntity;
        a.ATCreationDate = ...;
        a.ATFlag = ...;

        a.RequesterID = evt.CustomFields["RequesterId"] as string;
        a.ATComment = evt.CustomFields["ATComment"] as string;

        return true; 
    }
};

Обратите внимание, что вы также можете использовать Fluent API для настройки поставщика данных с более чистым синтаксисом:

Audit.Core.Configuration.Setup()
    .UseEntityFramework(_ => _
        .AuditTypeExplicitMapper(map => map
            .Map<Entity, Entity_AT>((evt, entry, auditEntity) =>
            {
                auditEntity.ATCreationDate = ...;
                auditEntity.ATFlag = ...;
                auditEntity.RequesterID = evt.CustomFields["RequesterId"] as string;
                auditEntity.ATComment = evt.CustomFields["ATComment"] as string;
            })));
...