首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Audit.net数据模型示例

Audit.net数据模型示例
EN

Stack Overflow用户
提问于 2018-08-20 06:37:34
回答 1查看 5.7K关注 0票数 4

是否有关于如何为Audit.Net将审计模型添加到现有项目的工作示例。

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

但是,该项目的文档有些缺乏,也没有关于如何使用实体框架进行自定义审核的简明示例。

我们已经通过MD文件的github回购,但我们仍然不能让审计工作。

另一个类似于此的问题已经被问到这里,但是没有明确的例子说明Audit_{entity}表应该是什么样子,它必须包含哪些字段,以及如何为它设置关系。

我们试图将JSON文件逆向工程成关系结构,但是在提出这个问题时,我们还没有得到任何审计来写入SQLite数据库。

EN

回答 1

Stack Overflow用户

发布于 2018-08-21 03:58:41

很抱歉,这些文档帮助不大,希望我(或任何人)将来能提供更好的文档。

假设您使用EntityFramework将实体映射到SQLite数据库,并且希望使用EF数据提供者将审核事件存储在同一个数据库中,即Audit_{entity}表中。

只要您的{实体}表和它的Audit_{实体}表之间有一对一的关系,您要为您的Audit_{实体}表使用的架构没有约束。然后,可以通过多种方式配置映射。

对于Audit_{entity}表的建议是具有与已审计的{entity}表相同的列,并且需要任何常见的附加列,例如在接口上定义的UserDate

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

代码语言:javascript
复制
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;
        });

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

更新

也许我一开始的假设是不正确的,您不是,不是审计EF实体,而是任何其他类型的审计。如果是这样的话,您需要的是一个将审计事件存储到您的数据提供者数据库中的SQLite。

目前,还没有内置的数据提供程序存储到SQLite,如果存在,它将只将事件的JSON表示存储在一个列中(比如SQL/MySql提供程序)。但是看起来您想要一个自定义模式,所以您需要实现自己的数据提供程序。

查看文档这里

下面是数据提供程序的一个示例框架:

代码语言:javascript
复制
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 
    }
}

然后你把它设置成:

代码语言:javascript
复制
Audit.Core.Configuration.Setup()
    .UseCustomProvider(new SQLiteDataProvider());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51925237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档