internal static ModelBuilder MapAuditR(this ModelBuilder modelBuilder, AuditRConfiguration auditRConfiguration) { modelBuilder.Entity <AuditEntry>(b => { b.Property(c => c.CorrelationId).IsRequired(); b.Property(c => c.DateCreated).IsRequired(); b.Property(c => c.EntityData).IsRequired(); b.Property(c => c.EntityKey).HasMaxLength(128).IsRequired(); b.Property(c => c.Id).IsRequired(); b.Property(c => c.EntityName).HasMaxLength(128).IsRequired(); b.Property(c => c.TableName).HasMaxLength(128).IsRequired(); b.Property(c => c.UserId).HasMaxLength(38).IsRequired(); b.Property(c => c.UserName).HasMaxLength(128).IsRequired(); b.Property(c => c.IPAddress).HasMaxLength(45).IsRequired(); b.Property(c => c.OperationType).HasColumnType("int").IsRequired() .HasConversion(v => (int)v, v => (OperationType)Enum.Parse(typeof(OperationType), v.ToString())); }); modelBuilder.Entity <AuditEntry>().HasIndex(w => new { w.CorrelationId, w.EntityKey, w.UserId }); modelBuilder.Entity <AuditEntry>().ToTable(auditRConfiguration.AuditEntryTableName, auditRConfiguration.Schema); modelBuilder.Entity <AuditEntryProperty>(b => { b.Property(c => c.NewValue).IsRequired(); b.Property(c => c.OldValue).IsRequired(); b.Property(c => c.PropertyName).IsRequired(); }); modelBuilder.Entity <AuditEntryProperty>().ToTable(auditRConfiguration.AuditEntryPropertyTableName, auditRConfiguration.Schema); modelBuilder.Entity <AuditEntry>().HasMany(m => m.AuditEntryProperties).WithOne(m => m.AuditEntry).IsRequired(); return(modelBuilder); }
public void Db_Update_Audit(FakeDbModel fakeDbModel) { var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var options = new DbContextOptionsBuilder <FakeAuditRDbContext>() .UseSqlite(connection) .Options; try { var config = new AuditRConfiguration(addChangesetWhenInsert: false); using (var context = new FakeAuditRDbContext(() => _auditUser, config, options)) { context.Database.EnsureCreated(); } using (var context = new FakeAuditRDbContext(() => _auditUser, config, options)) { context.FakeDbModels.Add(fakeDbModel); context.SaveChanges(); fakeDbModel.Name = "test_data"; context.SaveChanges(); } using (var context = new FakeAuditRDbContext(() => _auditUser, config, options)) { Assert.True(context.FakeDbModels.Any()); Assert.True(context.AuditEntryProperties.Count() == 1); Assert.True(context.AuditEntries.Count() == 2); } } finally { connection.Close(); } }
public FakeAuditRDbContext(Func <AuditUser> auditUserFunc, AuditRConfiguration auditRConfiguration, DbContextOptions options) : base(auditUserFunc, auditRConfiguration, options) { }
public static IServiceCollection AddAuditR(this IServiceCollection services, Func <AuditUser> funcCurrentUser, AuditRConfiguration auditRConfiguration) { if (funcCurrentUser == null) { throw new ArgumentNullException(nameof(funcCurrentUser)); } if (auditRConfiguration == null) { throw new ArgumentNullException(nameof(auditRConfiguration)); } services.AddScoped((s) => funcCurrentUser); services.AddSingleton(auditRConfiguration); return(services); }