使用 .Net Core 2.1 和 Audit.NET EF 12.1.10,我尝试添加包含审核表的迁移,但调用 Add-Migration 时,迁移中不会生成审核表。我假设使用“动态”审核会自动完成此操作。我没有任何审计接口——我将其留给 Audit.NET。以下是我的启动项:
var serviceProvider = services.BuildServiceProvider();
Audit.EntityFramework.Configuration.Setup()
.ForContext<MainDbContext>(config => config
.IncludeEntityObjects()
.AuditEventType("{context}:{database}"))
.UseOptOut()
.IgnoreAny(entity => entity.Name.StartsWith("AspNet") && entity.Name.StartsWith("OI"));
Audit.Core.Configuration.Setup()
.UseEntityFramework(ef => ef
.AuditTypeNameMapper(typeName => "Audit_" + typeName)
.AuditEntityAction((evt, entry, auditEntity) =>
{
// Get the current HttpContext
var httpContext = serviceProvider.GetService<IHttpContextAccessor>().HttpContext;
// Store the identity name on the "UserName" property of the audit entity
((dynamic)auditEntity).UserName = httpContext.User?.Identity.Name;
((dynamic)auditEntity).AuditDate = DateTime.UtcNow;
((dynamic)auditEntity).AuditAction = entry.Action;
}));
我的 DbContext 从 Audit IdentityDbContext 扩展:
public class MainDbContext : AuditIdentityDbContext<User, Role, string>
到目前为止,我只有一个名为 Activity 的实体,只是为了测试这一点,我希望 Add-Migrations 包含 Audit_Activity 表和 Activity 表,但我只得到了后者。不确定我在这里做错了什么。
我尝试审核身份角色只是因为它目前最容易测试
public class ApplicationRole : IdentityRole
{
}
public class Audit_ApplicationRole : IAudit
{
[Key]
public string Id { get; set; }
[Column(TypeName = "NVARCHAR(256)")]
public string Name { get; set; }
[Column(TypeName = "NVARCHAR(256)")]
public string NormalizedName { get; set; }
public string ConcurrencyStamp { get; set; }
public ApplicationRole Role { get; set; }
public string RoleId { get; set; }
[Column(TypeName = "VARCHAR(100)")]
public string AuditUser { get; set; }
public DateTime AuditDate { get; set; }
[Column(TypeName = "VARCHAR(7)")]
public string Action { get; set; } // "Insert", "Update" or "Delete"
}
public interface IAudit
{
string AuditUser { get; set; }
DateTime AuditDate { get; set; }
string Action { get; set; }
}
然后我在 StartUp.cs 中使用了你的代码
Audit.EntityFramework.Configuration.Setup()
.ForContext<ApplicationDbContext>(config => config
.IncludeEntityObjects()
.AuditEventType("{context}:{database}"));
Audit.Core.Configuration.Setup()
.UseEntityFramework(x => x
.AuditTypeNameMapper(typeName => "Audit_" + typeName)
.AuditEntityAction<IAudit>((ev, ent, auditEntity) =>
{
auditEntity.AuditDate = DateTime.UtcNow;
auditEntity.AuditUser = ev.Environment.UserName;
auditEntity.Action = ent.Action;
}));
我发现由于某种原因 Id 必须是字符串,它不能是整数。
链接的屏幕截图显示数据更改已保存。
在此输入图像描述
顺便说一句,我想保存通过身份登录的用户,所以如果有人想知道,这篇文章帮助我实现了这一目标。https://entityframeworkcore.com/knowledge-base/49799223/asp-net-core-entity-changing-history
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)