是否有关于如何为Audit.Net将审计模型添加到现有项目的工作示例。
它是一个非常好的组件,到目前为止,我和我的团队已经完成了标准JSON文件的工作,但是,我们希望将当前的解决方案迁移到我们的Xamarin应用程序中,并且希望将审计存储在设备上的本地SQLite数据库中。
但是,该项目的文档有些缺乏,也没有关于如何使用实体框架进行自定义审核的简明示例。
我们已经通过MD文件的github回购,但我们仍然不能让审计工作。
另一个类似于此的问题已经被问到这里,但是没有明确的例子说明Audit_{entity}表应该是什么样子,它必须包含哪些字段,以及如何为它设置关系。
我们试图将JSON文件逆向工程成关系结构,但是在提出这个问题时,我们还没有得到任何审计来写入SQLite数据库。
发布于 2018-08-21 03:58:41
很抱歉,这些文档帮助不大,希望我(或任何人)将来能提供更好的文档。
假设您使用EntityFramework将实体映射到SQLite数据库,并且希望使用EF数据提供者将审核事件存储在同一个数据库中,即Audit_{entity}表中。
只要您的{实体}表和它的Audit_{实体}表之间有一对一的关系,您要为您的Audit_{实体}表使用的架构没有约束。然后,可以通过多种方式配置映射。
对于Audit_{entity}表的建议是具有与已审计的{entity}表相同的列,并且需要任何常见的附加列,例如在接口上定义的User和Date。
因此,如果所有Audit_{entity}表都具有与其{entity}相同的列/属性,并且添加了一些公共列(定义在接口上),则配置可以设置如下:
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提供程序)。但是看起来您想要一个自定义模式,所以您需要实现自己的数据提供程序。
查看文档这里。
下面是数据提供程序的一个示例框架:
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
}
}然后你把它设置成:
Audit.Core.Configuration.Setup()
.UseCustomProvider(new SQLiteDataProvider());https://stackoverflow.com/questions/51925237
复制相似问题