diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/PropertyAccessor.cs b/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/PropertyAccessor.cs index 8012739..582ce92 100644 --- a/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/PropertyAccessor.cs +++ b/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/PropertyAccessor.cs @@ -39,7 +39,18 @@ internal static class PropertyAccessor converterInput = Expression.Convert(getterExpression, converterParamType); } - getterExpression = Expression.Invoke(converter, converterInput); + var invokeConverter = Expression.Invoke(converter, converterInput); + + if (propertyType.IsClass) + { + var nullCondition = Expression.Equal(getterExpression, Expression.Constant(null, propertyType)); + var nullResult = Expression.Constant(null, converter.ReturnType); + getterExpression = Expression.Condition(nullCondition, nullResult, invokeConverter); + } + else + { + getterExpression = invokeConverter; + } propertyType = getterExpression.Type; } diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithConverters.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithConverters.cs index 041a6be..7c58b6a 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithConverters.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithConverters.cs @@ -14,5 +14,8 @@ public class TestEntityWithConverters : TestEntityBase [Column("created_at")] public DateTime CreatedAt { get; set; } + + [Column("uri")] + public Uri? Uri { get; set; } } diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs index e69354f..2e2cb41 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs @@ -176,8 +176,8 @@ public async Task InsertEntities_AndReturn_WithEntityWithValueConverters(InsertS var entities = new List { - new TestEntityWithConverters() { Name = $"{_run}_Entity1", CreatedAt = now }, - new TestEntityWithConverters() { Name = $"{_run}_Entity2", CreatedAt = now.AddDays(-1) } + new TestEntityWithConverters() { Name = $"{_run}_Entity1", CreatedAt = now, Uri = null }, + new TestEntityWithConverters() { Name = $"{_run}_Entity2", CreatedAt = now.AddDays(-1), Uri = new Uri("http://example.com/test") } }; // Act