Вы видели основную документацию по Audit.NET , в частности поставщики выходных данных ?
Мне нужно провести аудит в той же базе данных, предпочтительно чтобыТаблицы аудита для выбранных организаций.Каждая сущность в моей базе данных имеет составные PK.
Таким образом, вы можете использовать EF data provider .Он работает с любым типом первичного ключа.
Как настроить режим вывода в этом сценарии?
Я не уверен, что вы подразумеваете под режимом вывода , но я предполагаю, что вы спрашиваете об OptIn / OptOut, чтобы игнорировать ваши объекты аудита для аудита.Если это так, у вас есть несколько вариантов, например, использование атрибута AuditIgnore
в ваших классах POCO аудита или с помощью методов fluent-api OptIn()
/ OptOut()
.См. Пример ниже.
Отправной точкой для всех проектов, которые находятся за Службой WCF, является сама служба WCF.Означает ли это, что точка для настройки Fluit-API Audit.Net здесь?
Вы можете настроить библиотеку Audit.NET в любом месте, но вы должны сделать это до создания любого события аудита,поэтому рекомендуется указывать код запуска сразу после запуска приложения или службы.
Пример кода
Ниже приведен минимальный пример, показывающий, как можно настроить Audit.NET иAudit.EntityFramework библиотеки.
Предположим, у вас есть следующая схема:
public class Student
{
public int PK_1 { get; set; }
public string PK_2 { get; set; }
public string Name { get; set; }
}
public class Student_Audit
{
public int PK_1 { get; set; }
public string PK_2 { get; set; }
public string Name { get; set; }
public DateTime AuditDate { get; set; }
public string AuditAction { get; set; }
}
public class SchoolContext : AuditDbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder) //<--Tip: its not DbModelBuilder, its Microsoft.EntityFrameworkCore.ModelBuilder
{
modelBuilder.Entity<Student>().HasKey(c => new { c.PK_1, c.PK_2 });
modelBuilder.Entity<Student_Audit>().HasKey(c => new { c.PK_1, c.PK_2, c.AuditDate });
}
public DbSet<Student> Students { get; set; }
public DbSet<Student_Audit> Students_Audit { get; set; }
}
Вы можете настроить библиотеку для своего кода запуска следующим образом:
// Setup audit to use the EF data provider
Audit.Core.Configuration.Setup()
.UseEntityFramework(_ => _
.AuditTypeExplicitMapper(m => m
// Map Student to Student_Audit
.Map<Student, Student_Audit>((ev, ent, studentAudit) =>
{
//add the action name and the date to the audit entity
studentAudit.AuditAction = ent.Action;
studentAudit.AuditDate = DateTime.UtcNow;
})));
// Configure the EF audit behavior
Audit.EntityFramework.Configuration.Setup()
.ForContext<SchoolContext>(_ => _.IncludeEntityObjects())
.UseOptOut()
.Ignore<Student_Audit>(); // Do not audit the audit tables
И контрольный пример:
using (var db = new SchoolContext())
{
db.Database.EnsureCreated();
var st = new Student() { PK_1 = 1, PK_2 = "one", Name = "John" };
db.Students.Add(st);
db.SaveChanges();
}
Будет сгенерировано следующее: