diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs b/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs index 2ab9d11..71f04b0 100644 --- a/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs +++ b/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs @@ -21,7 +21,11 @@ public ColumnMetadata(IProperty property, SqlDialectBuilder dialect, IComplexPr QuotedColumName = dialect.Quote(ColumnName); StoreDefinition = GetStoreDefinition(property); ClrType = property.ClrType; - IsGenerated = property.ValueGenerated != ValueGenerated.Never; + IsGenerated = property.ValueGenerated != ValueGenerated.Never + && (property.GetDefaultValueSql() != null + || property.GetComputedColumnSql() != null + || property.FindAnnotation(RelationalAnnotationNames.DefaultValue) != null + || (property.ClrType != typeof(Guid) && property.ClrType != typeof(Guid?))); } private readonly Func _getter; diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs index 24ae154..a895781 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs @@ -30,12 +30,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasConversion(new DateTimeToBinaryConverter()); }); - modelBuilder.Entity(builder => - { - builder.Property(e => e.Id) - .ValueGeneratedNever(); - }); - modelBuilder.Entity(builder => { builder diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs index c273ac0..bde7d79 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs @@ -314,15 +314,12 @@ public async Task InsertEntities_WithGeneratedGuidId(InsertStrategy strategy) new TestEntityWithGuidId { TestRun = _run, Id = Guid.NewGuid(), Name = $"{_run}_Entity2" } }; - // Act - var insertedEntities = await _context.InsertWithStrategyAsync(strategy, entities, configure => configure.CopyGeneratedColumns = true); + // Act - Guid PKs should be included in INSERT without requiring CopyGeneratedColumns = true + var insertedEntities = await _context.InsertWithStrategyAsync(strategy, entities); - // Assert + // Assert - all fields including the application-assigned Guid Id should be preserved insertedEntities.Should().BeEquivalentTo(entities, - o=> o - .RespectingRuntimeTypes() - .Excluding(e => e.Id) - ); + o => o.RespectingRuntimeTypes()); } [SkippableTheory] diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Merge/MergeTestsBase.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Merge/MergeTestsBase.cs index 69661c6..6489520 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Merge/MergeTestsBase.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Merge/MergeTestsBase.cs @@ -87,9 +87,9 @@ public async Task InsertEntities_MultipleTimes_WithGuidId(InsertStrategy strateg Update = (inserted, excluded) => inserted, }); - // Assert + // Assert - all fields including the application-assigned Guid Id should be preserved insertedEntities.Should().BeEquivalentTo(entities, - o => o.RespectingRuntimeTypes().Excluding(e => e.Id)); + o => o.RespectingRuntimeTypes()); } [SkippableTheory]