diff --git a/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj b/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj
index 0be3e2d..f77d764 100644
--- a/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj
+++ b/src/Pgvector.EntityFrameworkCore/Pgvector.EntityFrameworkCore.csproj
@@ -18,7 +18,7 @@
-
+
diff --git a/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs b/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs
index 43d3cf3..685d971 100644
--- a/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs
+++ b/src/Pgvector/Npgsql/VectorTypeHandlerResolver.cs
@@ -32,7 +32,7 @@ public override NpgsqlTypeHandler ResolveByDataTypeName(string typeName)
public override NpgsqlTypeHandler ResolveByClrType(Type type)
{
- var dataTypeName = ClrTypeToDataTypeName(type);
+ var dataTypeName = VectorTypeMappingResolver.ClrTypeToDataTypeName(type);
if (dataTypeName != null)
{
var handler = ResolveByDataTypeName(dataTypeName);
@@ -43,23 +43,15 @@ public override NpgsqlTypeHandler ResolveByClrType(Type type)
return null;
}
- public override TypeMappingInfo GetMappingByDataTypeName(string dataTypeName)
- => DoGetMappingByDataTypeName(dataTypeName);
-
- internal static string ClrTypeToDataTypeName(Type type)
+ public override NpgsqlTypeHandler ResolveByNpgsqlDbType(NpgsqlDbType npgsqlDbType)
{
- if (type == typeof(Vector))
- {
- return "vector";
- }
-
return null;
}
- internal static TypeMappingInfo DoGetMappingByDataTypeName(string dataTypeName)
+ public override NpgsqlTypeHandler ResolveValueTypeGenerically(T value)
{
- if (dataTypeName == "vector")
- return new TypeMappingInfo(NpgsqlDbType.Unknown, "vector");
+ if (typeof(T) == typeof(Vector))
+ return _vectorHandler;
return null;
}
diff --git a/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs b/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs
index 7770cab..2914eb0 100644
--- a/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs
+++ b/src/Pgvector/Npgsql/VectorTypeHandlerResolverFactory.cs
@@ -1,18 +1,19 @@
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..e4946a5
--- /dev/null
+++ b/src/Pgvector/Npgsql/VectorTypeMappingResolver.cs
@@ -0,0 +1,37 @@
+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)
+ {
+ if (dataTypeName == "vector")
+ return new TypeMappingInfo(NpgsqlDbType.Unknown, "vector");
+
+ return null;
+ }
+
+ internal static string ClrTypeToDataTypeName(Type type)
+ {
+ if (type == typeof(Vector))
+ return "vector";
+
+ return null;
+ }
+ }
+}
diff --git a/src/Pgvector/Pgvector.csproj b/src/Pgvector/Pgvector.csproj
index dc3738b..ef4c8de 100644
--- a/src/Pgvector/Pgvector.csproj
+++ b/src/Pgvector/Pgvector.csproj
@@ -15,7 +15,7 @@
-
+