这是我的第一种任务,我正在使用本教程。 Link
区别在于本教程是在单层中完成的,因此可以轻松访问Identity属性。
我的项目有
问题是我将审计模型放在实体层中,但是在本教程中,它具有AspNetUsers表的外键,并且代码优先迁移没有通过。
he ForeignKeyAttribute on property 'AuditUserId' on type 'Namespace.Entities.AuditActions.Audit' is not valid. The navigation property 'AuditUser' was not found on the dependent type 'Namespace.Entities.AuditActions.Audit'. The Name value should be a valid navigation property name
第二个问题是我无法从放置了保存替代的数据层访问用户信息。
var currentUser = OwinContextHelper.CurrentApplicationUser;
我无法从放置替代的数据层访问位于表示层中的OwinHelpper类。
如何在应用程序中实现本教程?
任何想法都会受到欢迎。
对我来说,一个初级开发人员很容易:)
答案 0 :(得分:1)
尝试解决第二个问题:
对于这种用例,我会推荐Audit.NET / Audit.EF库(实际上我想您已经在使用它了)。
您可以使用Custom Action来避免信息从表示层传递到数据层。该库使您可以参与审计创建,并且可以将该代码放在表示层上,例如:
class Presentation
{
void StartUp()
{
// Use SqlServerDataProvider to store the audit events on SQL
Audit.Core.Configuration.Setup()
.UseSqlServer(_ => _
.ConnectionString("...")
.TableName("Event")
.IdColumnName("EventId")
.JsonColumnName("Data"));
// Add a custom action to have a custom field
Audit.Core.Configuration.AddOnCreatedAction(scope =>
{
scope.SetCustomField("OwinUser", OwinContextHelper.CurrentApplicationUser);
});
}
}