Audit.net数据模型示例

时间:2018-08-20 06:37:34

标签: sqlite entity-framework-core-2.1 audit.net

对于Audit.Net,没有人有一个如何将审计模型添加到现有项目的有效示例。

这是一个极好的组件,到目前为止,我和我的团队已经了解了标准的JSON文件,但是,我们希望将当前的解决方案迁移到Xamarin应用程序中,并希望将其存储设备上本地SQLite数据库中的审核。

但是,该项目的文档有所欠缺,并且没有简洁的示例说明如何使用Entity Framework进行自定义审核。

我们已经遍历了github存储库上的MD文件,但是仍然无法进行审核。

又问了一个类似的问题HERE,但没有明确的示例说明Audit_ {entity}表应该是什么样,它必须包含哪些字段以及如何为其建立关系

我们试图将JSON文件反向工程为关系结构,但是在问这个问题时,我们还没有进行任何审计以写入SQLite数据库。

1 个答案:

答案 0 :(得分:3)

很抱歉文档没有太大帮助,希望我(或任何人)将来可以提供更好的文档。

  

我假设您正在使用 EntityFramework 映射您的实体   到 SQLite 数据库,并且您想使用 EF data provider   将审核事件存储在Audit_ {entity}表中的同一数据库中。

只要您的{entity}表及其Audit_ {entity}表之间具有一对一的关系,对要用于Audit_ {entity}表的架构就没有限制。然后可以通过多种方式配置映射。

对于Audit_ {entity}表的建议是与已审计的{entity}表具有相同的列,并需要任何常见的附加列,例如在{_1}}和User上定义界面。

因此,如果您所有的Audit_ {entity}表都具有与其{entity}相同的列/属性,并且添加了一些公共列(在接口上定义),则可以这样配置:

Date

请注意,该接口不是强制性的,但使用该接口可使配置更整洁。另外请注意,如果您愿意,可以使Audit_ {entity}继承自{entity}。


更新

也许我一开始的假设是不正确的,并且您不是审核EF实体,但您正在审核其他任何类型的审核。在这种情况下,您正在寻找的是Data Provider,它将审核事件存储到SQLite数据库中。

目前,没有内置数据提供程序可存储到SQLite,如果有,则它将仅将事件的JSON表示形式存储在一列中(例如SQL / { {3}}个提供商)。但是看起来您想要一个自定义架构,因此您将需要实现自己的数据提供程序。

查看文档MySql

这是数据提供者的示例框架:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}
public class Audit_User : IAudit
{
    public int Id { get; set; }
    public string Name { get; set; }
    // IAudit members:
    public string AuditUser { get; set; }
    public datetime AuditDate { get; set; }
    public string Action { get; set } // "Insert", "Update" or "Delete"
}

Audit.Core.Configuration.Setup()
    .UseEntityFramework(x => x
        .AuditTypeNameMapper(typeName => "Audit_" + typeName)
        .AuditEntityAction<IAudit>((ev, ent, auditEntity) =>
        {
            auditEntity.AuditDate = DateTime.UtcNow;
            auditEntity.AuditUser = evt.Environment.UserName;
            auditEntity.AuditAction = ent.Action;
        });

然后您只需设置以下内容:

public class SQLiteDataProvider : AuditDataProvider
{
    public override object InsertEvent(AuditEvent auditEvent)
    {
        // Insert the event into SQLite and return its ID
    }
    public override void ReplaceEvent(object eventId, AuditEvent auditEvent)
    {
        // Replace the event given its ID (only used for CreationPolicies InsertOnStartReplaceOnEnd and Manual)
    }
    // async implementation:
    public override async Task<object> InsertEventAsync(AuditEvent auditEvent)
    {
        // Asynchronously insert the event into SQLite and return its ID
    }
    public override async Task ReplaceEventAsync(object eventId, AuditEvent auditEvent)
    {
        // Asynchronously  replace the event given its ID 
    }
}