diff --git a/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj b/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj
index a676e9f..5a37f7e 100644
--- a/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj
+++ b/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs b/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs
index 020b973..439b150 100644
--- a/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs
+++ b/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs
@@ -27,7 +27,7 @@ internal VectorTypeHandlerResolver(NpgsqlConnector connector)
public override NpgsqlTypeHandler? ResolveByClrType(Type type)
{
- var dataTypeName = ClrTypeToDataTypeName(type);
+ var dataTypeName = VectorTypeMappingResolver.ClrTypeToDataTypeName(type);
if (dataTypeName != null)
{
var handler = ResolveByDataTypeName(dataTypeName);
@@ -38,14 +38,11 @@ internal VectorTypeHandlerResolver(NpgsqlConnector connector)
return null;
}
- public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
- => DoGetMappingByDataTypeName(dataTypeName);
+ public override NpgsqlTypeHandler? ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType)
+ => null;
- internal static string? ClrTypeToDataTypeName(Type type)
- => type == typeof(Vector) ? "vector" : null;
-
- internal static TypeMappingInfo? DoGetMappingByDataTypeName(string dataTypeName)
- => dataTypeName == "vector" ? new TypeMappingInfo(NpgsqlDbType.Unknown, "vector") : null;
+ public override NpgsqlTypeHandler? ResolveValueTypeGenerically(T value)
+ => typeof(T) == typeof(Vector) ? _vectorHandler : null;
PostgresType? PgType(string pgTypeName)
=> _databaseInfo.TryGetPostgresTypeByName(pgTypeName, out var pgType) ? pgType : null;
diff --git a/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs b/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs
index 273a899..9d5eff1 100644
--- a/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs
+++ b/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs
@@ -1,17 +1,18 @@
using Npgsql.Internal;
using Npgsql.Internal.TypeHandling;
+using Npgsql.Internal.TypeMapping;
using System;
namespace Pgvector.Npgsql;
public class VectorTypeHandlerResolverFactory : TypeHandlerResolverFactory
{
- public override TypeHandlerResolver Create(NpgsqlConnector connector)
+ public override TypeHandlerResolver Create(TypeMapper typeMapper, NpgsqlConnector connector)
=> new VectorTypeHandlerResolver(connector);
- public override string? GetDataTypeNameByClrType(Type type)
- => VectorTypeHandlerResolver.ClrTypeToDataTypeName(type);
+ public override TypeMappingResolver CreateMappingResolver()
+ => new VectorTypeMappingResolver();
- public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
- => VectorTypeHandlerResolver.DoGetMappingByDataTypeName(dataTypeName);
+ public override TypeMappingResolver CreateGlobalMappingResolver()
+ => new VectorTypeMappingResolver();
}
diff --git a/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs b/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs
new file mode 100644
index 0000000..ac3ab97
--- /dev/null
+++ b/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs
@@ -0,0 +1,26 @@
+using Npgsql.Internal;
+using Npgsql.Internal.TypeHandling;
+using Npgsql.Internal.TypeMapping;
+using Npgsql.PostgresTypes;
+using NpgsqlTypes;
+using System;
+
+namespace Pgvector.Npgsql;
+
+public class VectorTypeMappingResolver : TypeMappingResolver
+{
+ public override string? GetDataTypeNameByClrType(Type type)
+ => ClrTypeToDataTypeName(type);
+
+ public override TypeMappingInfo? GetMappingByDataTypeName(string dataTypeName)
+ => DoGetMappingByDataTypeName(dataTypeName);
+
+ public override TypeMappingInfo? GetMappingByPostgresType(TypeMapper mapper, PostgresType type)
+ => DoGetMappingByDataTypeName(type.Name);
+
+ static TypeMappingInfo? DoGetMappingByDataTypeName(string dataTypeName)
+ => dataTypeName == "vector" ? new TypeMappingInfo(NpgsqlDbType.Unknown, "vector") : null;
+
+ internal static string? ClrTypeToDataTypeName(Type type)
+ => type == typeof(Vector) ? "vector" : null;
+}
diff --git a/src/Pgvector/Pgvector.csproj b/src/Pgvector/Pgvector.csproj
index 8a4d169..28fdbb1 100644
--- a/src/Pgvector/Pgvector.csproj
+++ b/src/Pgvector/Pgvector.csproj
@@ -17,7 +17,7 @@
-
+