diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs b/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs index aedcfab..baf9a76 100644 --- a/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs +++ b/src/PhenX.EntityFrameworkCore.BulkInsert/Metadata/ColumnMetadata.cs @@ -24,7 +24,7 @@ internal sealed class ColumnMetadata(IProperty property, SqlDialectBuilder dial public bool IsGenerated { get; } = property.ValueGenerated != ValueGenerated.Never; - public object? GetValue(object entity, BulkInsertOptions options) + public object GetValue(object entity, BulkInsertOptions options) { var result = _getter(entity); @@ -40,7 +40,7 @@ internal sealed class ColumnMetadata(IProperty property, SqlDialectBuilder dial } } - return result; + return result ?? DBNull.Value; } private static Func BuildGetter(IProperty property) diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/JsonDbObject.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/JsonDbObject.cs new file mode 100644 index 0000000..1c138df --- /dev/null +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/JsonDbObject.cs @@ -0,0 +1,8 @@ +namespace PhenX.EntityFrameworkCore.BulkInsert.Tests.DbContext; + +public class JsonDbObject +{ + public int Code { get; set; } + + public string Name { get; set; } = string.Empty; +} diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs index 07916ea..57f3f08 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestDbContext.cs @@ -36,7 +36,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(b => { - b.Property(x => x.Json).AsJsonString("jsonb"); + b.Property(x => x.JsonArray).AsJsonString("jsonb"); + b.Property(x => x.JsonObject).AsJsonString("jsonb"); }); modelBuilder.Entity(b => @@ -54,7 +55,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(b => { - b.Property(x => x.Json).AsJsonString("json"); + b.Property(x => x.JsonArray).AsJsonString("json"); + b.Property(x => x.JsonObject).AsJsonString("json"); }); modelBuilder.Entity(b => @@ -72,7 +74,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(b => { - b.Property(x => x.Json).AsJsonString(null); + b.Property(x => x.JsonArray).AsJsonString(null); + b.Property(x => x.JsonObject).AsJsonString(null); }); modelBuilder.Entity(b => @@ -90,7 +93,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(b => { - b.Property(x => x.Json).AsJsonString(null); + b.Property(x => x.JsonArray).AsJsonString(null); + b.Property(x => x.JsonObject).AsJsonString(null); }); modelBuilder.Entity(b => @@ -108,7 +112,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(b => { - b.Property(x => x.Json).AsJsonString(null); + b.Property(x => x.JsonArray).AsJsonString(null); + b.Property(x => x.JsonObject).AsJsonString(null); }); modelBuilder.Entity(b => diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntity.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntity.cs index b679c32..03a9172 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntity.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntity.cs @@ -22,6 +22,13 @@ public class TestEntity : TestEntityBase [Column("the_identifier")] public Guid Identifier { get; set; } + [Column("nullable_identifier")] + public Guid? NullableIdentifier { get; set; } + + public DateTime Created { get; set; } + + public DateTime? Modified { get; set; } + [Column("string_enum_value")] public StringEnum StringEnumValue { get; set; } diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithJson.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithJson.cs index dbde0b1..3742dd6 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithJson.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/DbContext/TestEntityWithJson.cs @@ -9,5 +9,7 @@ public class TestEntityWithJson : TestEntityBase [Key] public int Id { get; set; } - public List Json { get; set; } = []; + public List JsonArray { get; set; } = []; + + public JsonDbObject JsonObject { 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 13c114c..e69354f 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Basic/BasicTestsBase.cs @@ -54,8 +54,16 @@ public async Task InsertEntities_WithJson(InsertStrategy strategy) // Arrange var entities = new List { - new TestEntityWithJson { Json = [1] }, - new TestEntityWithJson { Json = [2] } + new TestEntityWithJson + { + JsonArray = [1], + JsonObject = new JsonDbObject { Code = 1, Name = "Test1" }, + }, + new TestEntityWithJson + { + JsonArray = [2], + JsonObject = new JsonDbObject { Code = 2, Name = "Test2" }, + }, }; // Act