VOOZH about

URL: https://www.nuget.org/packages/Pgvector.EntityFrameworkCore/

⇱ NuGet Gallery | Pgvector.EntityFrameworkCore 0.3.0




👁 Image
Pgvector.EntityFrameworkCore 0.3.0

Prefix Reserved
dotnet add package Pgvector.EntityFrameworkCore --version 0.3.0
 
 
NuGet\Install-Package Pgvector.EntityFrameworkCore -Version 0.3.0
 
 
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Pgvector.EntityFrameworkCore" Version="0.3.0" />
 
 
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Pgvector.EntityFrameworkCore" Version="0.3.0" />
 
Directory.Packages.props
<PackageReference Include="Pgvector.EntityFrameworkCore" />
 
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Pgvector.EntityFrameworkCore --version 0.3.0
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Pgvector.EntityFrameworkCore, 0.3.0"
 
 
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Pgvector.EntityFrameworkCore@0.3.0
 
 
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Pgvector.EntityFrameworkCore&version=0.3.0
 
Install as a Cake Addin
#tool nuget:?package=Pgvector.EntityFrameworkCore&version=0.3.0
 
Install as a Cake Tool
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

pgvector-dotnet

pgvector support for .NET (C#, F#, and Visual Basic)

Supports Npgsql, Dapper, Entity Framework Core, and Npgsql.FSharp

👁 Build Status

Getting Started

Follow the instructions for your database library:

Or check out some examples:

Npgsql (C#)

Run

dotnet add package Pgvector

Create a connection

var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);
dataSourceBuilder.UseVector();
await using var dataSource = dataSourceBuilder.Build();

var conn = dataSource.OpenConnection();

Enable the extension

await using (var cmd = new NpgsqlCommand("CREATE EXTENSION IF NOT EXISTS vector", conn))
{
 await cmd.ExecuteNonQueryAsync();
}

conn.ReloadTypes();

Create a table

await using (var cmd = new NpgsqlCommand("CREATE TABLE items (id serial PRIMARY KEY, embedding vector(3))", conn))
{
 await cmd.ExecuteNonQueryAsync();
}

Insert a vector

await using (var cmd = new NpgsqlCommand("INSERT INTO items (embedding) VALUES ($1)", conn))
{
 var embedding = new Vector(new float[] { 1, 1, 1 });
 cmd.Parameters.AddWithValue(embedding);
 await cmd.ExecuteNonQueryAsync();
}

Get the nearest neighbors

await using (var cmd = new NpgsqlCommand("SELECT * FROM items ORDER BY embedding <-> $1 LIMIT 5", conn))
{
 var embedding = new Vector(new float[] { 1, 1, 1 });
 cmd.Parameters.AddWithValue(embedding);

 await using (var reader = await cmd.ExecuteReaderAsync())
 {
 while (await reader.ReadAsync())
 {
 Console.WriteLine(reader.GetValue(0));
 }
 }
}

Add an approximate index

await using (var cmd = new NpgsqlCommand("CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)", conn))
{
 await cmd.ExecuteNonQueryAsync();
}

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

Dapper

Run

dotnet add package Pgvector.Dapper

Import the library

using Pgvector.Dapper;

Create a connection

SqlMapper.AddTypeHandler(new VectorTypeHandler());

var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);
dataSourceBuilder.UseVector();
await using var dataSource = dataSourceBuilder.Build();

var conn = dataSource.OpenConnection();

Enable the extension

conn.Execute("CREATE EXTENSION IF NOT EXISTS vector");
conn.ReloadTypes();

Define a class

public class Item
{
 public int Id { get; set; }
 public Vector? Embedding { get; set; }
}

Also supports HalfVector and SparseVector

Create a table

conn.Execute("CREATE TABLE items (id serial PRIMARY KEY, embedding vector(3))");

Insert a vector

var embedding = new Vector(new float[] { 1, 1, 1 });
conn.Execute(@"INSERT INTO items (embedding) VALUES (@embedding)", new { embedding });

Get the nearest neighbors

var embedding = new Vector(new float[] { 1, 1, 1 });
var items = conn.Query<Item>("SELECT * FROM items ORDER BY embedding <-> @embedding LIMIT 5", new { embedding });
foreach (Item item in items)
{
 Console.WriteLine(item.Embedding);
}

Add an approximate index

conn.Execute("CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)");
// or
conn.Execute("CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100)");

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

Entity Framework Core

Run

dotnet add package Pgvector.EntityFrameworkCore

The latest version works with Entity Framework Core 9 and 10. For Entity Framework Core 8, use version 0.2.2 and this readme.

Import the library

using Pgvector.EntityFrameworkCore;

Enable the extension

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
 modelBuilder.HasPostgresExtension("vector");
}

Configure the connection

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
 optionsBuilder.UseNpgsql("connString", o => o.UseVector());
}

Define a model

public class Item
{
 public int Id { get; set; }

 [Column(TypeName = "vector(3)")]
 public Vector? Embedding { get; set; }
}

Also supports HalfVector and SparseVector

Insert a vector

ctx.Items.Add(new Item { Embedding = new Vector(new float[] { 1, 1, 1 }) });
ctx.SaveChanges();

Get the nearest neighbors

var embedding = new Vector(new float[] { 1, 1, 1 });
var items = await ctx.Items
 .OrderBy(x => x.Embedding!.L2Distance(embedding))
 .Take(5)
 .ToListAsync();

foreach (Item item in items)
{
 if (item.Embedding != null)
 {
 Console.WriteLine(item.Embedding);
 }
}

Also supports MaxInnerProduct, CosineDistance, L1Distance, HammingDistance, and JaccardDistance

Get the distance

var items = await ctx.Items
 .Select(x => new { Entity = x, Distance = x.Embedding!.L2Distance(embedding) })
 .ToListAsync();

Get items within a certain distance

var items = await ctx.Items
 .Where(x => x.Embedding!.L2Distance(embedding) < 5)
 .ToListAsync();

Add an approximate index

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
 modelBuilder.Entity<Item>()
 .HasIndex(i => i.Embedding)
 .HasMethod("hnsw")
 .HasOperators("vector_l2_ops")
 .HasStorageParameter("m", 16)
 .HasStorageParameter("ef_construction", 64);
 // or
 modelBuilder.Entity<Item>()
 .HasIndex(i => i.Embedding)
 .HasMethod("ivfflat")
 .HasOperators("vector_l2_ops")
 .HasStorageParameter("lists", 100);
}

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

Npgsql.FSharp

Run

dotnet add package Pgvector

Import the library

open Pgvector

Create a connection

let dataSourceBuilder = new NpgsqlDataSourceBuilder(connString)
dataSourceBuilder.UseVector()
use dataSource = dataSourceBuilder.Build()

Enable the extension

dataSource
|> Sql.fromDataSource
|> Sql.query "CREATE EXTENSION IF NOT EXISTS vector"
|> Sql.executeNonQuery

Create a table

dataSource
|> Sql.fromDataSource
|> Sql.query "CREATE TABLE items (id serial PRIMARY KEY, embedding vector(3))"
|> Sql.executeNonQuery

Insert a vector

let embedding = new Vector([| 1f; 1f; 1f |])
let parameter = new NpgsqlParameter("", embedding)

dataSource
|> Sql.fromDataSource
|> Sql.query "INSERT INTO items (embedding) VALUES (@embedding)"
|> Sql.parameters [ "embedding", Sql.parameter parameter ]
|> Sql.executeNonQuery

Get the nearest neighbors

type Item = {
 Id: int
 Embedding: Vector
}

dataSource
|> Sql.fromDataSource
|> Sql.query "SELECT * FROM items ORDER BY embedding <-> @embedding LIMIT 5"
|> Sql.parameters [ "embedding", Sql.parameter parameter ]
|> Sql.execute (fun read ->
 {
 Id = read.int "id"
 Embedding = read.fieldValue<Vector> "embedding"
 })
|> printfn "%A"

Add an approximate index

dataSource
|> Sql.fromDataSource
|> Sql.query "CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)"
|> Sql.executeNonQuery

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

Npgsql (Visual Basic)

Run

dotnet add package Pgvector

Create a connection

Dim dataSourceBuilder As New NpgsqlDataSourceBuilder(connString)
dataSourceBuilder.UseVector()
Dim dataSource = dataSourceBuilder.Build()

Dim conn = dataSource.OpenConnection()

Enable the extension

Using cmd As New NpgsqlCommand("CREATE EXTENSION IF NOT EXISTS vector", conn)
 cmd.ExecuteNonQuery()
End Using

conn.ReloadTypes()

Create a table

Using cmd As New NpgsqlCommand("CREATE TABLE items (id serial PRIMARY KEY, embedding vector(3))", conn)
 cmd.ExecuteNonQuery()
End Using

Insert a vector

Using cmd As New NpgsqlCommand("INSERT INTO items (embedding) VALUES ($1)", conn)
 Dim embedding As New Vector(New Single() {1, 1, 1})
 cmd.Parameters.AddWithValue(embedding)
 cmd.ExecuteNonQuery()
End Using

Get the nearest neighbors

Using cmd As New NpgsqlCommand("SELECT * FROM items ORDER BY embedding <-> $1 LIMIT 5", conn)
 Dim embedding As New Vector(New Single() {1, 1, 1})
 cmd.Parameters.AddWithValue(embedding)

 Using reader As NpgsqlDataReader = cmd.ExecuteReader()
 While reader.Read()
 Console.WriteLine(reader.GetValue(0))
 End While
 End Using
End Using

Add an approximate index

Using cmd As New NpgsqlCommand("CREATE INDEX ON items USING hnsw (embedding vector_l2_ops)", conn)
 cmd.ExecuteNonQuery()
End Using

Use vector_ip_ops for inner product and vector_cosine_ops for cosine distance

See a full example

Reference

Vectors

Create a vector from an array

var vec = new Vector(new float[] { 1, 2, 3 });

Get an array

var arr = vec.ToArray();

Half Vectors

Create a half vector from an array

var vec = new HalfVector(new Half[] { (Half)1, (Half)2, (Half)3 });

Get an array

var arr = vec.ToArray();

Sparse Vectors

Create a sparse vector from an array

var vec = new SparseVector(new float[] { 1, 0, 2, 0, 3, 0 });

Or a dictionary of non-zero elements

var dictionary = new Dictionary<int, float>();
dictionary.Add(0, 1);
dictionary.Add(2, 2);
dictionary.Add(4, 3);
var vec = new SparseVector(dictionary, 6);

Note: Indices start at 0

Get the number of dimensions

var dim = vec.Dimensions;

Get the indices of non-zero elements

var indices = vec.Indices;

Get the values of non-zero elements

var values = vec.Values;

Get an array

var arr = vec.ToArray();

History

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/pgvector/pgvector-dotnet.git
cd pgvector-dotnet
createdb pgvector_dotnet_test
dotnet test

To run an example:

cd examples/Loading
createdb pgvector_example
dotnet run
Product Versions Compatible and additional computed target framework versions.
.NET net8.0 net8.0 is compatible.  net8.0-android net8.0-android was computed.  net8.0-browser net8.0-browser was computed.  net8.0-ios net8.0-ios was computed.  net8.0-maccatalyst net8.0-maccatalyst was computed.  net8.0-macos net8.0-macos was computed.  net8.0-tvos net8.0-tvos was computed.  net8.0-windows net8.0-windows was computed.  net9.0 net9.0 was computed.  net9.0-android net9.0-android was computed.  net9.0-browser net9.0-browser was computed.  net9.0-ios net9.0-ios was computed.  net9.0-maccatalyst net9.0-maccatalyst was computed.  net9.0-macos net9.0-macos was computed.  net9.0-tvos net9.0-tvos was computed.  net9.0-windows net9.0-windows was computed.  net10.0 net10.0 was computed.  net10.0-android net10.0-android was computed.  net10.0-browser net10.0-browser was computed.  net10.0-ios net10.0-ios was computed.  net10.0-maccatalyst net10.0-maccatalyst was computed.  net10.0-macos net10.0-macos was computed.  net10.0-tvos net10.0-tvos was computed.  net10.0-windows net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (10)

Showing the top 5 NuGet packages that depend on Pgvector.EntityFrameworkCore:

Package Downloads
Hx.Abp.Attachment.EntityFrameworkCore

Package Description

SoftwareExtravaganza.Whizbang.Data.EFCore.Postgres

PostgreSQL Entity Framework Core integration for Whizbang with source-generated configuration.

FluxIndex.Storage.PostgreSQL

PostgreSQL with pgvector storage provider for FluxIndex

RecallAI.SDK.Postgres

RecallAI Memory SDK - PostgreSQL provider with pgvector support for production-ready vector search. Includes automatic migrations and connection pooling.

Stratara.EventSourcing.EntityFrameworkCore

EF Core persistence for the Stratara event-sourced stack on PostgreSQL — write-store, read-store, ASP.NET Identity store, shared conventions, value generators, and UnitOfWork primitives. Targets Npgsql with pgvector.

GitHub repositories (6)

Showing the top 6 popular GitHub repositories that depend on Pgvector.EntityFrameworkCore:

Repository Stars
dotnet/eShop
A reference .NET application implementing an eCommerce site
bitfoundation/bitplatform
Build all of your apps using what you already know and love ❤️
CervantesSec/cervantes
Cervantes is an open-source, collaborative platform designed specifically for pentesters and red teams. It serves as a comprehensive management tool, streamlining the organization of projects, clients, vulnerabilities, and reports in a single, centralized location.
thangchung/practical-dotnet-aspire
The practical .NET Aspire builds on the coffeeshop app business domain
Azure-Samples/eShopOnAzure
A variant of https://github.com/dotnet/eShop that uses Azure services
daniel3303/Equibles
An open-source, self-hosted mini Bloomberg Terminal for AI agents — SEC filings, institutional holdings, insider trading, congressional trades, and short data from a single self-hosted stack.
Version Downloads Last Updated
0.3.0 873,990 12/21/2025
0.2.2 908,881 3/26/2025
0.2.1 674,771 6/26/2024
0.2.0 276,596 11/24/2023
0.2.0-rc.1 7,846 10/14/2023
0.1.2 26,971 9/25/2023
0.1.1 77,784 4/25/2023
0.1.0 2,923 3/30/2023