Jad*_*ric 5 sqlite audit.net entity-framework-core-2.1
有没有人有一个关于如何将审计模型添加到现有项目(Audit.Net)的工作示例。
这是一个非常棒的组件,到目前为止,我和我的团队已经习惯了标准 JSON 文件,但是,我们希望将当前的解决方案迁移到 Xamarin 应用程序,并且希望将审核存储在设备上的本地 SQLite 数据库。
但是,该项目的文档有些缺乏,并且没有关于如何使用实体框架进行自定义审核的简明示例。
我们已经处理了 github 存储库上的 MD 文件,但仍然无法进行审核。
另一个与此类似的问题已在此处提出,但没有明确的示例说明 Audit_{entity} 表应该是什么样子、它必须包含哪些字段以及如何为其设置关系。
我们尝试将 JSON 文件逆向工程为关系结构,但在提出这个问题时,我们还没有得到任何写入 SQLite 数据库的审核。
抱歉,该文档没有太大帮助,希望我(或任何人)将来能够提供更好的文档。
我假设您正在使用EntityFramework将实体映射到SQLite数据库,并且您希望使用EF 数据提供程序 将审核事件存储在同一数据库的 Audit_{entity} 表中。
只要 {entity} 表与其 Audit_{entity} 表之间存在一对一关系,您要用于 Audit_{entity} 表的架构就没有限制。然后可以通过多种方式配置映射。
Audit_{entity} 表的建议是具有与审核的 {entity} 表相同的列,以及所需的任何常见附加列,例如在接口上定义的 aUser
和 a 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;
});
Run Code Online (Sandbox Code Playgroud)
请注意,该接口不是强制性的,但使用它可以使配置更清晰。另请注意,如果您愿意,您可以使 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
}
}
Run Code Online (Sandbox Code Playgroud)
然后你只需设置它:
Audit.Core.Configuration.Setup()
.UseCustomProvider(new SQLiteDataProvider());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6368 次 |
最近记录: |