diff --git a/CHANGELOG.md b/CHANGELOG.md index a4a09ef9..b88ab7de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to Audit.NET and its extensions will be documented in this f The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). +## [13.2.2] - 2018-11-15 +### Modified +- Audit.EntityFramework.Core: Fix bug when auditing tables with composite multiple froeign keys related to the same column (#178). + ## [13.2.1] - 2018-11-12 ### Modified - Audit.EntityFramework and Audit.EntityFramework.Core: Fix parameter default for `IgnoreMatchedProperties(bool)` on configuration API to be _true_. diff --git a/src/Audit.DynamicProxy/Audit.DynamicProxy.csproj b/src/Audit.DynamicProxy/Audit.DynamicProxy.csproj index 76622a3c..00ca8771 100644 --- a/src/Audit.DynamicProxy/Audit.DynamicProxy.csproj +++ b/src/Audit.DynamicProxy/Audit.DynamicProxy.csproj @@ -4,7 +4,7 @@ Generate Audit Logs by intercepting operation calls on any class without changing its code. Copyright 2016 Audit.DynamicProxy - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.EntityFramework.Core/Audit.EntityFramework.Core.csproj b/src/Audit.EntityFramework.Core/Audit.EntityFramework.Core.csproj index e969e7a1..cbf518c7 100644 --- a/src/Audit.EntityFramework.Core/Audit.EntityFramework.Core.csproj +++ b/src/Audit.EntityFramework.Core/Audit.EntityFramework.Core.csproj @@ -4,7 +4,7 @@ Generate Audit Logs from EntityFramework context changes Copyright 2016 Audit.EntityFramework.Core - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;netstandard2.0;net461 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.EntityFramework.Identity.Core/Audit.EntityFramework.Identity.Core.csproj b/src/Audit.EntityFramework.Identity.Core/Audit.EntityFramework.Identity.Core.csproj index 40c26880..e5fece8d 100644 --- a/src/Audit.EntityFramework.Identity.Core/Audit.EntityFramework.Identity.Core.csproj +++ b/src/Audit.EntityFramework.Identity.Core/Audit.EntityFramework.Identity.Core.csproj @@ -4,7 +4,7 @@ Generate Audit Logs from EntityFramework identity context changes Copyright 2018 Audit.EntityFramework.Identity.Core - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;netstandard2.0;net461 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.EntityFramework.Identity/Audit.EntityFramework.Identity.csproj b/src/Audit.EntityFramework.Identity/Audit.EntityFramework.Identity.csproj index f8c21167..fc35091a 100644 --- a/src/Audit.EntityFramework.Identity/Audit.EntityFramework.Identity.csproj +++ b/src/Audit.EntityFramework.Identity/Audit.EntityFramework.Identity.csproj @@ -4,7 +4,7 @@ Generate Audit Logs from EntityFramework identity context changes Copyright 2018 Audit.EntityFramework.Identity - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;netstandard2.0;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.EntityFramework/Audit.EntityFramework.csproj b/src/Audit.EntityFramework/Audit.EntityFramework.csproj index f18d512a..13f1dd10 100644 --- a/src/Audit.EntityFramework/Audit.EntityFramework.csproj +++ b/src/Audit.EntityFramework/Audit.EntityFramework.csproj @@ -4,7 +4,7 @@ Generate Audit Logs from EntityFramework context changes Copyright 2016 Audit.EntityFramework - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;netstandard2.0;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.EntityFramework/DbContextHelper.Core.cs b/src/Audit.EntityFramework/DbContextHelper.Core.cs index 62c3b4d5..9205d53b 100644 --- a/src/Audit.EntityFramework/DbContextHelper.Core.cs +++ b/src/Audit.EntityFramework/DbContextHelper.Core.cs @@ -175,7 +175,7 @@ private static IEntityType GetDefiningType(DbContext dbContext, EntityEntry entr { foreach (var prop in fk.Properties) { - result.Add(GetColumnName(prop), entry.Property(prop.Name).CurrentValue); + result[GetColumnName(prop)] = entry.Property(prop.Name).CurrentValue; } } } diff --git a/src/Audit.FileSystem/Audit.FileSystem.csproj b/src/Audit.FileSystem/Audit.FileSystem.csproj index 90e7f092..c656bc1a 100644 --- a/src/Audit.FileSystem/Audit.FileSystem.csproj +++ b/src/Audit.FileSystem/Audit.FileSystem.csproj @@ -4,7 +4,7 @@ Generate Audit Logs from file system events using a FileSystemWatcher Copyright 2018 Audit.FileSystem - 13.2.1 + 13.2.2 Federico Colombo netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.Mvc.Core/Audit.Mvc.Core.csproj b/src/Audit.Mvc.Core/Audit.Mvc.Core.csproj index 7405f1d1..05f7679f 100644 --- a/src/Audit.Mvc.Core/Audit.Mvc.Core.csproj +++ b/src/Audit.Mvc.Core/Audit.Mvc.Core.csproj @@ -4,7 +4,7 @@ Generate detailed Audit Logs for AspNet Core MVC Controller actions. Copyright 2016 Audit.Mvc.Core - 13.2.1 + 13.2.2 Federico Colombo netstandard1.6;netstandard2.0;net451 TRACE;DEBUG;STRONG_NAME diff --git a/src/Audit.Mvc/Audit.Mvc.csproj b/src/Audit.Mvc/Audit.Mvc.csproj index 33d8977f..e0638a01 100644 --- a/src/Audit.Mvc/Audit.Mvc.csproj +++ b/src/Audit.Mvc/Audit.Mvc.csproj @@ -4,7 +4,7 @@ Generate detailed Audit Logs for MVC Controller actions. Copyright 2016 Audit.Mvc - 13.2.1 + 13.2.2 Federico Colombo netstandard1.6;netstandard2.0;net45 TRACE;DEBUG;STRONG_NAME diff --git a/src/Audit.NET.AzureDocumentDB/Audit.NET.AzureDocumentDB.csproj b/src/Audit.NET.AzureDocumentDB/Audit.NET.AzureDocumentDB.csproj index 39878352..58bafce8 100644 --- a/src/Audit.NET.AzureDocumentDB/Audit.NET.AzureDocumentDB.csproj +++ b/src/Audit.NET.AzureDocumentDB/Audit.NET.AzureDocumentDB.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs into an Azure Document DB database Copyright 2016 Audit.AzureDocumentDB - 13.2.1 + 13.2.2 Federico Colombo net45;netstandard1.6;netstandard2.0 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.AzureStorage/Audit.NET.AzureStorage.csproj b/src/Audit.NET.AzureStorage/Audit.NET.AzureStorage.csproj index 1bdcba83..e2ffe3a7 100644 --- a/src/Audit.NET.AzureStorage/Audit.NET.AzureStorage.csproj +++ b/src/Audit.NET.AzureStorage/Audit.NET.AzureStorage.csproj @@ -4,7 +4,7 @@ Store Audit.NET Logs into an Azure Blob Storage Copyright 2016 Audit.AzureStorage - 13.2.1 + 13.2.2 Federico Colombo netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.DynamoDB/Audit.NET.DynamoDB.csproj b/src/Audit.NET.DynamoDB/Audit.NET.DynamoDB.csproj index 513ede7d..65b42bd7 100644 --- a/src/Audit.NET.DynamoDB/Audit.NET.DynamoDB.csproj +++ b/src/Audit.NET.DynamoDB/Audit.NET.DynamoDB.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs into Amazon DynamoDB Copyright 2018 Audit.DynamoDB - 13.2.1 + 13.2.2 Federico Colombo netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.ElasticSearch/Audit.NET.Elasticsearch.csproj b/src/Audit.NET.ElasticSearch/Audit.NET.Elasticsearch.csproj index f8f87f16..c3c19603 100644 --- a/src/Audit.NET.ElasticSearch/Audit.NET.Elasticsearch.csproj +++ b/src/Audit.NET.ElasticSearch/Audit.NET.Elasticsearch.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs into Elasticsearch database Copyright 2018 Audit.Elasticsearch - 13.2.1 + 13.2.2 Federico Colombo net451;netstandard1.3 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.EventLog.Core/Audit.NET.EventLog.Core.csproj b/src/Audit.NET.EventLog.Core/Audit.NET.EventLog.Core.csproj index 2266877b..6f6b7fc9 100644 --- a/src/Audit.NET.EventLog.Core/Audit.NET.EventLog.Core.csproj +++ b/src/Audit.NET.EventLog.Core/Audit.NET.EventLog.Core.csproj @@ -4,7 +4,7 @@ Log Audit.NET events to the Windows EventLog when targeting net standard 2.0 Copyright 2018 Audit.NET.EventLog.Core - 13.2.1 + 13.2.2 Federico Colombo netstandard2.0 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.MongoDB/Audit.NET.MongoDB.csproj b/src/Audit.NET.MongoDB/Audit.NET.MongoDB.csproj index b99c5f3d..dd9e97fb 100644 --- a/src/Audit.NET.MongoDB/Audit.NET.MongoDB.csproj +++ b/src/Audit.NET.MongoDB/Audit.NET.MongoDB.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs into a MongoDB database Copyright 2016 Audit.MongoDB - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;net45 $(NoWarn);1591 diff --git a/src/Audit.NET.MySql/Audit.NET.MySql.csproj b/src/Audit.NET.MySql/Audit.NET.MySql.csproj index 5394b4f3..e374fb77 100644 --- a/src/Audit.NET.MySql/Audit.NET.MySql.csproj +++ b/src/Audit.NET.MySql/Audit.NET.MySql.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs into a MySQL database Copyright 2016 Audit.MySql - 13.2.1 + 13.2.2 Federico Colombo netcoreapp1.0;net451 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.PostgreSql/Audit.NET.PostgreSql.csproj b/src/Audit.NET.PostgreSql/Audit.NET.PostgreSql.csproj index 5c536064..5ce6a1c1 100644 --- a/src/Audit.NET.PostgreSql/Audit.NET.PostgreSql.csproj +++ b/src/Audit.NET.PostgreSql/Audit.NET.PostgreSql.csproj @@ -3,7 +3,7 @@ Store Audit.NET Trail Logs into a PostgreSQL database Copyright 2017 Audit.PostgreSql - 13.2.1 + 13.2.2 Federico Colombo netstandard2.0;netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.Redis/Audit.NET.Redis.csproj b/src/Audit.NET.Redis/Audit.NET.Redis.csproj index cf48579a..531449cd 100644 --- a/src/Audit.NET.Redis/Audit.NET.Redis.csproj +++ b/src/Audit.NET.Redis/Audit.NET.Redis.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs in a Redis database as a strings, lists, hashes, sortedsets or pubsub Copyright 2017 Audit.Redis - 13.2.1 + 13.2.2 Federico Colombo netstandard1.5;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.SqlServer/Audit.NET.SqlServer.csproj b/src/Audit.NET.SqlServer/Audit.NET.SqlServer.csproj index dc57865d..f3498e0f 100644 --- a/src/Audit.NET.SqlServer/Audit.NET.SqlServer.csproj +++ b/src/Audit.NET.SqlServer/Audit.NET.SqlServer.csproj @@ -4,7 +4,7 @@ Store Audit.NET Trail Logs into a SQL Server database Copyright 2016 Audit.SqlServer - 13.2.1 + 13.2.2 Federico Colombo netstandard2.0;netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.Udp/Audit.NET.Udp.csproj b/src/Audit.NET.Udp/Audit.NET.Udp.csproj index c0f0906a..fa013049 100644 --- a/src/Audit.NET.Udp/Audit.NET.Udp.csproj +++ b/src/Audit.NET.Udp/Audit.NET.Udp.csproj @@ -4,7 +4,7 @@ Send Audit.NET Trail Logs as connectionless UDP datagrams to a remote host or a multicast group Copyright 2017 Audit.Udp - 13.2.1 + 13.2.2 Federico Colombo netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET.log4net/Audit.NET.log4net.csproj b/src/Audit.NET.log4net/Audit.NET.log4net.csproj index bf2cd497..2a114b60 100644 --- a/src/Audit.NET.log4net/Audit.NET.log4net.csproj +++ b/src/Audit.NET.log4net/Audit.NET.log4net.csproj @@ -4,7 +4,7 @@ Log Audit.NET Audit Trail using Apache log4net™ Copyright 2017 Audit.log4net - 13.2.1 + 13.2.2 Federico Colombo netstandard1.3;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.NET/Audit.NET.csproj b/src/Audit.NET/Audit.NET.csproj index f5e2815c..48e25f0a 100644 --- a/src/Audit.NET/Audit.NET.csproj +++ b/src/Audit.NET/Audit.NET.csproj @@ -3,7 +3,7 @@ An extensible framework to audit executing operations in .NET and .NET Core. Copyright 2016 Audit.NET - 13.2.1 + 13.2.2 Federico Colombo netstandard1.3;netstandard2.0;net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.SignalR/Audit.SignalR.csproj b/src/Audit.SignalR/Audit.SignalR.csproj index c5cb48dd..c17db731 100644 --- a/src/Audit.SignalR/Audit.SignalR.csproj +++ b/src/Audit.SignalR/Audit.SignalR.csproj @@ -3,7 +3,7 @@ Generate Audit Logs for ASP.NET SignalR invokations Copyright 2016 Audit.SignalR - 13.2.1 + 13.2.2 Federico Colombo net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.WCF/Audit.WCF.csproj b/src/Audit.WCF/Audit.WCF.csproj index 562d3fa8..456ccfda 100644 --- a/src/Audit.WCF/Audit.WCF.csproj +++ b/src/Audit.WCF/Audit.WCF.csproj @@ -4,7 +4,7 @@ Generate detailed Audit Logs for WCF service calls. Copyright 2016 Audit.Wcf - 13.2.1 + 13.2.2 Federico Colombo net45 $(DefineConstants);STRONG_NAME diff --git a/src/Audit.WebApi.Core/Audit.WebApi.Core.csproj b/src/Audit.WebApi.Core/Audit.WebApi.Core.csproj index b9112858..3b305f68 100644 --- a/src/Audit.WebApi.Core/Audit.WebApi.Core.csproj +++ b/src/Audit.WebApi.Core/Audit.WebApi.Core.csproj @@ -4,7 +4,7 @@ Generate detailed Audit Logs for AspNet Core Web API Controller calls. Copyright 2016 Audit.WebApi.Core - 13.2.1 + 13.2.2 Federico Colombo netstandard1.6;netstandard2.0;net451 TRACE;DEBUG;STRONG_NAME diff --git a/src/Audit.WebApi/Audit.WebApi.csproj b/src/Audit.WebApi/Audit.WebApi.csproj index 9c2dd6eb..4f0b3ff3 100644 --- a/src/Audit.WebApi/Audit.WebApi.csproj +++ b/src/Audit.WebApi/Audit.WebApi.csproj @@ -4,7 +4,7 @@ Generate detailed Audit Logs for Web API Controller calls. Copyright 2016 Audit.WebApi - 13.2.1 + 13.2.2 Federico Colombo netstandard1.6;netstandard2.0;net45 TRACE;DEBUG;STRONG_NAME diff --git a/test/Audit.EntityFramework.Core.UnitTest/Demo.sql b/test/Audit.EntityFramework.Core.UnitTest/Demo.sql new file mode 100644 index 00000000..31e51e7b --- /dev/null +++ b/test/Audit.EntityFramework.Core.UnitTest/Demo.sql @@ -0,0 +1,59 @@ +CREATE DATABASE Demo +GO +USE [Demo] +GO + +CREATE TABLE [dbo].[Tenant]( +[Id] [int] NOT NULL, +[Name] varchar(100) NOT NULL, +CONSTRAINT [PK_Tenant] PRIMARY KEY CLUSTERED +( +[Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[Employee]( +[Id] [int] NOT NULL, +[TenantId] [int] NOT NULL, +[Name] varchar(100) NOT NULL, +CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED +( +[Id] ASC, +[TenantId] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Tenant] FOREIGN KEY([TenantId]) +REFERENCES [dbo].[Tenant] ([Id]) +GO + +ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_Tenant] +GO + +CREATE TABLE [dbo].[PettyCashTransaction]( +[Id] [int] NOT NULL, +[EmployeeId] [int] NULL, +[TrusteeId] [int] NULL, +[TenantId] [int] NULL, +CONSTRAINT [PK_PettyCashTransaction] PRIMARY KEY CLUSTERED +( +[Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[PettyCashTransaction] WITH CHECK ADD CONSTRAINT [FK_PettyCashTransaction_Employee] FOREIGN KEY([EmployeeId], [TenantId]) +REFERENCES [dbo].[Employee] ([Id], [TenantId]) +GO + +ALTER TABLE [dbo].[PettyCashTransaction] CHECK CONSTRAINT [FK_PettyCashTransaction_Employee] +GO + +ALTER TABLE [dbo].[PettyCashTransaction] WITH CHECK ADD CONSTRAINT [FK_PettyCashTransaction_EmployeeTrustee] FOREIGN KEY([TrusteeId], [TenantId]) +REFERENCES [dbo].[Employee] ([Id], [TenantId]) +GO + +ALTER TABLE [dbo].[PettyCashTransaction] CHECK CONSTRAINT [FK_PettyCashTransaction_EmployeeTrustee] +GO \ No newline at end of file diff --git a/test/Audit.EntityFramework.Core.UnitTest/DemoContext.cs b/test/Audit.EntityFramework.Core.UnitTest/DemoContext.cs new file mode 100644 index 00000000..f38e8391 --- /dev/null +++ b/test/Audit.EntityFramework.Core.UnitTest/DemoContext.cs @@ -0,0 +1,71 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace Audit.EntityFramework.Core.UnitTest +{ + public class DemoContext : AuditDbContext + { + public const string CnnString = "data source=localhost;initial catalog=Demo;integrated security=true;"; + + public DbSet Tenants { get; set; } + public DbSet Employees { get; set; } + public DbSet Pettys { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlServer(CnnString); + optionsBuilder.EnableSensitiveDataLogging(); + } + + protected override void OnModelCreating(ModelBuilder _) + { + _.Entity().ToTable("Tenant"); + _.Entity().ToTable("Employee"); + _.Entity().ToTable("PettyCashTransaction"); + + _.Entity() + .HasKey(t => t.Id); + + _.Entity() + .HasKey(t => new { t.Id, t.TenantId }); + + _.Entity() + .HasKey(t => new { t.Id }); + + _.Entity() + .HasOne(t => t.Employee) + .WithMany() + .HasForeignKey(t => new { t.EmployeeId, t.TenantId }); + + _.Entity() + .HasOne(t => t.Trustee) + .WithMany() + .HasForeignKey(t => new { t.TrusteeId, t.TenantId }); + } + } + + public class Tenant + { + public int Id { get; set; } + public string Name { get; set; } + } + public class Employee + { + public int Id { get; set; } + public int TenantId { get; set; } + public string Name { get; set; } + } + public class PettyCashTransaction + { + public int Id { get; set; } + public int EmployeeId { get; set; } + public int TrusteeId { get; set; } + public int TenantId { get; set; } + + public Employee Employee { get; set; } + public Employee Trustee { get; set; } + } +} diff --git a/test/Audit.EntityFramework.Core.UnitTest/EfCore21Tests.cs b/test/Audit.EntityFramework.Core.UnitTest/EfCore21Tests.cs index b0fb6f0b..a77f8839 100644 --- a/test/Audit.EntityFramework.Core.UnitTest/EfCore21Tests.cs +++ b/test/Audit.EntityFramework.Core.UnitTest/EfCore21Tests.cs @@ -26,6 +26,80 @@ public void Setup() new BlogsContext().Database.EnsureCreated(); } + [Test] + public void Test_EF_CompositeRepeatedForeignKey() + { + // Issue #178 + var events = new List(); + Audit.Core.Configuration.Setup() + .UseDynamicProvider(_ => _.OnInsertAndReplace(ev => + { + events.Add(ev.GetEntityFrameworkEvent()); + })); + Audit.EntityFramework.Configuration.Setup() + .ForContext(cfg => cfg.IncludeEntityObjects()); + + var id = new Random().Next(); + + using (var ctx = new DemoContext()) + { + var tenant = new Tenant() { Id = id, Name = "tenant" }; + ctx.Tenants.Add(tenant); + + ctx.SaveChanges(); + + var employee1 = new Employee() { Id = id + 1, Name = "test1", TenantId = tenant.Id }; + ctx.Employees.Add(employee1); + var employee2 = new Employee() { Id = id + 2, Name = "test2", TenantId = tenant.Id }; + ctx.Employees.Add(employee2); + + ctx.SaveChanges(); + + var petty = new PettyCashTransaction() { Id = id + 3, EmployeeId = employee1.Id, TenantId = tenant.Id, TrusteeId = employee2.Id }; + ctx.Pettys.Add(petty); + ctx.SaveChanges(); + + var emp = ctx.Employees.Single(x => x.Id == employee1.Id); + emp.Name = $"test1-updated"; + ctx.SaveChanges(); + } + + Assert.AreEqual(4, events.Count); + Assert.AreEqual(1, events[0].Entries.Count); + Assert.AreEqual(id, events[0].Entries[0].ColumnValues["Id"]); + Assert.AreEqual("tenant", events[0].Entries[0].ColumnValues["Name"]); + Assert.AreEqual(id, events[0].Entries[0].PrimaryKey["Id"]); + + Assert.AreEqual(2, events[1].Entries.Count); + Assert.AreEqual(id+1, events[1].Entries[0].ColumnValues["Id"]); + Assert.AreEqual("test1", events[1].Entries[0].ColumnValues["Name"]); + Assert.AreEqual(id, events[1].Entries[0].ColumnValues["TenantId"]); + Assert.AreEqual(2, events[1].Entries[0].PrimaryKey.Count); + Assert.AreEqual(id+1, events[1].Entries[0].PrimaryKey["Id"]); + Assert.AreEqual(id, events[1].Entries[0].PrimaryKey["TenantId"]); + + Assert.AreEqual(id + 2, events[1].Entries[1].ColumnValues["Id"]); + Assert.AreEqual("test2", events[1].Entries[1].ColumnValues["Name"]); + Assert.AreEqual(id, events[1].Entries[1].ColumnValues["TenantId"]); + Assert.AreEqual(2, events[1].Entries[1].PrimaryKey.Count); + Assert.AreEqual(id + 2, events[1].Entries[1].PrimaryKey["Id"]); + Assert.AreEqual(id, events[1].Entries[1].PrimaryKey["TenantId"]); + + Assert.AreEqual(1, events[2].Entries.Count); + Assert.AreEqual(id + 3, events[2].Entries[0].ColumnValues["Id"]); + Assert.AreEqual(id + 1, events[2].Entries[0].ColumnValues["EmployeeId"]); + Assert.AreEqual(id, events[2].Entries[0].ColumnValues["TenantId"]); + Assert.AreEqual(id + 2, events[2].Entries[0].ColumnValues["TrusteeId"]); + Assert.AreEqual(id + 3, events[2].Entries[0].PrimaryKey["Id"]); + + Assert.AreEqual(1, events[3].Entries.Count); + Assert.AreEqual(1, events[3].Entries[0].Changes.Count); + Assert.AreEqual("Name", events[3].Entries[0].Changes[0].ColumnName); + Assert.AreEqual("test1", events[3].Entries[0].Changes[0].OriginalValue); + Assert.AreEqual("test1-updated", events[3].Entries[0].Changes[0].NewValue); + + } + [Test] public void Test_EF_MapMultipleTypesToSameAuditType() { diff --git a/test/test.bat b/test/test.bat deleted file mode 100644 index aef5b101..00000000 --- a/test/test.bat +++ /dev/null @@ -1,92 +0,0 @@ -@echo off -start "" "D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" -start "" /D c:\redis "c:\redis\redis-server.exe" -net start mysql57 -net start mssqlserver -net start postgresql-x64-9.6 -net start elasticsearch - -cd .. -dotnet restore -cd test - -cd Audit.Mvc.UnitTest -dotnet test --logger:"console;verbosity=normal" -echo continue... -pause > nul -echo Running... - -cd .. - -cd Audit.UnitTest -dotnet test --logger:"console;verbosity=normal" -echo continue... -pause > nul -echo Running... -cd .. - -cd Audit.WebApi.UnitTest -dotnet test --logger:"console;verbosity=normal" -echo continue... -pause > nul -echo Running... - -cd .. - -cd Audit.DynamicProxy.UnitTest -dotnet test --logger:"console;verbosity=normal" -echo continue... -pause > nul -echo Running... -cd .. - -cd Audit.EntityFramework.Core.UnitTest -dotnet test --logger:"console;verbosity=normal" - -echo Running... -cd .. - -cd Audit.EntityFramework.UnitTest -"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe" -..\..\packages\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe bin\Debug\Audit.EntityFramework.UnitTest.dll --noresult --where=cat=Sql -..\..\packages\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe bin\Debug\Audit.EntityFramework.UnitTest.dll --noresult --where=cat=LocalDb -..\..\packages\NUnit.ConsoleRunner.3.7.0\tools\nunit3-console.exe bin\Debug\Audit.EntityFramework.UnitTest.dll --noresult --where=cat=Stress -echo continue... -pause > nul -echo Running... -cd .. - -cd Audit.Redis.UnitTest -dotnet test --logger:"console;verbosity=normal" -echo continue... -pause > nul -echo Running... -cd .. - -cd Audit.Integration.AspNetCore -dotnet run -echo continue... -pause > nul -cd .. - -cd Audit.IntegrationTest - -dotnet test --logger:"console;verbosity=normal" --filter "TestCategory!=AzureDocDb&TestCategory!=AzureBlob&TestCategory!=WCF&TestCategory!=Elasticsearch&TestCategory!=Dynamo" -dotnet test --logger:"console;verbosity=normal" --filter "TestCategory=AzureDocDb" -dotnet test --logger:"console;verbosity=normal" --filter "TestCategory=AzureBlob" -dotnet test --logger:"console;verbosity=normal" -f net451 --filter "TestCategory=WCF&TestCategory!=Async" -dotnet test --logger:"console;verbosity=normal" -f net451 --filter "TestCategory=WCF&TestCategory=Async" -dotnet test --logger:"console;verbosity=normal" --filter "TestCategory=Elasticsearch" -dotnet test --logger:"console;verbosity=normal" --filter "TestCategory=Dynamo" -echo continue... -pause > nul -cd .. - -del TestResult.xml /s - -net stop mssqlserver -net stop mysql57 -net stop postgresql-x64-9.6 -net stop elasticsearch -taskkill /f /im mongod.exe -taskkill /f /im redis-server.exe \ No newline at end of file diff --git a/test/testns.bat b/test/testns.bat index 2365580e..0564720d 100644 --- a/test/testns.bat +++ b/test/testns.bat @@ -1,4 +1,5 @@ @echo off +start "" /D D:\DynamoDB "D:\DynamoDB\run.bat" start "" "D:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" start "" /D c:\redis "c:\redis\redis-server.exe" net start mysql57