diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlBulkInsertProvider.cs b/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlBulkInsertProvider.cs index 7904ef7..d7a6e35 100644 --- a/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlBulkInsertProvider.cs +++ b/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlBulkInsertProvider.cs @@ -35,7 +35,6 @@ private static string GetBinaryImportCommand(IReadOnlyList prope { BatchSize = 50_000, Converters = [PostgreSqlGeometryConverter.Instance], - TypeProviders = [PostgreSqlGeometryConverter.Instance], }; /// diff --git a/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlGeometryConverter.cs b/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlGeometryConverter.cs index 93c913c..af78164 100644 --- a/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlGeometryConverter.cs +++ b/src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlGeometryConverter.cs @@ -1,15 +1,11 @@ -using Microsoft.EntityFrameworkCore.Metadata; - using NetTopologySuite.Geometries; -using NpgsqlTypes; - using PhenX.EntityFrameworkCore.BulkInsert.Abstractions; using PhenX.EntityFrameworkCore.BulkInsert.Options; namespace PhenX.EntityFrameworkCore.BulkInsert.PostgreSql; -internal sealed class PostgreSqlGeometryConverter : IBulkValueConverter, IPostgresTypeProvider +internal sealed class PostgreSqlGeometryConverter : IBulkValueConverter { public static readonly PostgreSqlGeometryConverter Instance = new(); @@ -27,23 +23,11 @@ public bool TryConvertValue(object source, BulkInsertOptions options, out object geometry.SRID = options.SRID; } - result = geometry.ToBinary(); + result = geometry; return true; } result = source; return false; } - - public bool TryGetType(IProperty property, out NpgsqlDbType result) - { - if (property.ClrType.IsAssignableTo(typeof(Geometry))) - { - result = NpgsqlDbType.Bytea; - return true; - } - - result = default; - return false; - } } diff --git a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Geo/GeoTestsBase.cs b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Geo/GeoTestsBase.cs index 38c8fb1..bbc7f82 100644 --- a/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Geo/GeoTestsBase.cs +++ b/tests/PhenX.EntityFrameworkCore.BulkInsert.Tests/Tests/Geo/GeoTestsBase.cs @@ -1,5 +1,7 @@ using FluentAssertions; +using Microsoft.EntityFrameworkCore; + using NetTopologySuite.Geometries; using PhenX.EntityFrameworkCore.BulkInsert.Tests.DbContainer; @@ -71,4 +73,29 @@ public async Task InsertEntities_WithGeo_And_Default_SRID(InsertStrategy strateg insertedEntities.Should().BeEquivalentTo(entities, o => o.RespectingRuntimeTypes().Excluding((TestEntityWithGeo e) => e.Id)); } + + [SkippableTheory] + [CombinatorialData] + public async Task InsertEntities_WithGeo_And_Search(InsertStrategy strategy) + { + // Arrange + var runId = Guid.NewGuid(); + + var geo1 = new Point(1, 2) { SRID = 4326 }; + var geo2 = new Point(3, 4) { SRID = 4326 }; + + var entities = new List + { + new TestEntityWithGeo { TestRun = runId, GeoObject = geo1 }, + new TestEntityWithGeo { TestRun = runId, GeoObject = geo2 } + }; + + // Act + await _context.InsertWithStrategyAsync(strategy, entities); + + var found = await _context.TestEntitiesWithGeo.Where(x => x.TestRun == runId && x.GeoObject.Distance(geo1) < 1).ToListAsync(); + + // Assert + Assert.NotEmpty(found); + } }