【问题标题】:how to implement custom field with Audit.Net entityframework如何使用 Audit.Net entityframework 实现自定义字段
【发布时间】:2019-03-26 12:59:24
【问题描述】:

我是 Audit.net 的新手。我在我的项目中成功配置了它。

但是现在,我需要扩展它以保存额外的信息,例如 requesterID 和视图页面上的评论。

我的情况: 实体映射到 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();

但没有结果

【问题讨论】:

    标签: c# entity-framework-core audit-trail audit.net


    【解决方案1】:

    您已将"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;
                })));
    

    【讨论】:

    • 了解它对我来说很好用。非常感谢您的快速回答 Audit.net 似乎是一个非常好的框架,我保留它。我想我还有其他问题,但我更喜欢浏览文档。我很努力,但像你这样的人让我有继续下去的意义。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多