diff --git a/N.EntityFrameworkCore.Extensions.Test/Data/TestDbContext.cs b/N.EntityFrameworkCore.Extensions.Test/Data/TestDbContext.cs index 5b54413..b564256 100644 --- a/N.EntityFrameworkCore.Extensions.Test/Data/TestDbContext.cs +++ b/N.EntityFrameworkCore.Extensions.Test/Data/TestDbContext.cs @@ -11,6 +11,7 @@ public class TestDbContext : DbContext public virtual DbSet ProductCategories { get; set; } public virtual DbSet ProductsWithCustomSchema { get; set; } public virtual DbSet ProductsWithComplexKey { get; set; } + public virtual DbSet ProductsWithTrigger { get; set; } public virtual DbSet Orders { get; set; } public virtual DbSet TpcPeople { get; set; } public virtual DbSet TphPeople { get; set; } @@ -49,6 +50,5 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) t.ComplexProperty(p => p.Position).IsRequired(); t.Property(p => p.Color).HasConversion(x => x.ToArgb(), x => Color.FromArgb(x)); }); - } } \ No newline at end of file diff --git a/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/BulkInsert.cs b/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/BulkInsert.cs index fbc597d..ae7e5f0 100644 --- a/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/BulkInsert.cs +++ b/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/BulkInsert.cs @@ -370,6 +370,22 @@ public void With_Proxy_Type() Assert.IsTrue(newTotal - oldTotal == rowsInserted, "The new count minus the old count should match the number of rows inserted."); } [TestMethod] + public void With_Trigger() + { + var dbContext = SetupDbContext(false); + var products = new List(); + for (int i = 1; i < 1000; i++) + { + products.Add(new ProductWithTrigger { Id = i.ToString(), Price = 1.57M, StatusString="InStock" }); + } + int rowsInserted = dbContext.BulkInsert(products, options => { + options.AutoMapOutput = false; + options.BulkCopyOptions = SqlBulkCopyOptions.FireTriggers; + }); + + Assert.IsTrue(rowsInserted == products.Count, "The number of rows inserted must match the count of products"); + } + [TestMethod] public void With_ValueGenerated_Default() { var dbContext = SetupDbContext(false); diff --git a/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/DbContextExtensionsBase.cs b/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/DbContextExtensionsBase.cs index 169fcf8..b015c80 100644 --- a/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/DbContextExtensionsBase.cs +++ b/N.EntityFrameworkCore.Extensions.Test/DbContextExtensions/DbContextExtensionsBase.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; +using Microsoft.EntityFrameworkCore; using Microsoft.VisualStudio.TestTools.UnitTesting; using N.EntityFrameworkCore.Extensions.Test.Data; using N.EntityFrameworkCore.Extensions.Test.Data.Enums; @@ -28,10 +29,12 @@ public void Init() protected TestDbContext SetupDbContext(bool populateData, PopulateDataMode mode = PopulateDataMode.Normal) { TestDbContext dbContext = new TestDbContext(); + dbContext.Database.Migrate(); dbContext.Orders.Truncate(); dbContext.Products.Truncate(); dbContext.ProductCategories.Clear(); dbContext.ProductsWithCustomSchema.Truncate(); + dbContext.ProductsWithTrigger.Truncate(); dbContext.Database.ClearTable("TpcCustomer"); dbContext.Database.ClearTable("TpcVendor"); dbContext.TphPeople.Truncate(); diff --git a/N.EntityFrameworkCore.Extensions.Test/Migrations/20250509021251_Initial.Designer.cs b/N.EntityFrameworkCore.Extensions.Test/Migrations/20250509021251_Initial.Designer.cs new file mode 100644 index 0000000..bc0a74f --- /dev/null +++ b/N.EntityFrameworkCore.Extensions.Test/Migrations/20250509021251_Initial.Designer.cs @@ -0,0 +1,24 @@ +// +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using N.EntityFrameworkCore.Extensions.Test.Data; + +#nullable disable + +namespace N.EntityFrameworkCore.Extensions.Test.Migrations +{ + [DbContext(typeof(TestDbContext))] + [Migration("20250509021251_Initial")] + partial class Initial + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { + + } + } +} diff --git a/N.EntityFrameworkCore.Extensions.Test/Migrations/20250509021251_Initial.cs b/N.EntityFrameworkCore.Extensions.Test/Migrations/20250509021251_Initial.cs new file mode 100644 index 0000000..0c2aee2 --- /dev/null +++ b/N.EntityFrameworkCore.Extensions.Test/Migrations/20250509021251_Initial.cs @@ -0,0 +1,20 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace N.EntityFrameworkCore.Extensions.Test.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql("CREATE TRIGGER trgProductWithTriggers\r\nON ProductsWithTrigger\r\nFOR INSERT, UPDATE, DELETE\r\nAS\r\nBEGIN\r\n PRINT 1 END"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/N.EntityFrameworkCore.Extensions.Test/Migrations/TestDbContextModelSnapshot.cs b/N.EntityFrameworkCore.Extensions.Test/Migrations/TestDbContextModelSnapshot.cs new file mode 100644 index 0000000..b32c4aa --- /dev/null +++ b/N.EntityFrameworkCore.Extensions.Test/Migrations/TestDbContextModelSnapshot.cs @@ -0,0 +1,22 @@ +// +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using N.EntityFrameworkCore.Extensions.Test.Data; + +#nullable disable + +namespace N.EntityFrameworkCore.Extensions.Test.Migrations +{ + [DbContext(typeof(TestDbContext))] + partial class TestDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { + + } + } +} diff --git a/N.EntityFrameworkCore.Extensions.Test/N.EntityFrameworkCore.Extensions.Test.csproj b/N.EntityFrameworkCore.Extensions.Test/N.EntityFrameworkCore.Extensions.Test.csproj index fd4ccaf..8e1c263 100644 --- a/N.EntityFrameworkCore.Extensions.Test/N.EntityFrameworkCore.Extensions.Test.csproj +++ b/N.EntityFrameworkCore.Extensions.Test/N.EntityFrameworkCore.Extensions.Test.csproj @@ -7,6 +7,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive +