Cvoya.Graph.Neo4j 1.0.0

Prefix Reserved
dotnet add package Cvoya.Graph.Neo4j --version 1.0.0
                    
NuGet\Install-Package Cvoya.Graph.Neo4j -Version 1.0.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="Cvoya.Graph.Neo4j" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Cvoya.Graph.Neo4j" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Cvoya.Graph.Neo4j" />
                    
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 Cvoya.Graph.Neo4j --version 1.0.0
                    
#r "nuget: Cvoya.Graph.Neo4j, 1.0.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 Cvoya.Graph.Neo4j@1.0.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=Cvoya.Graph.Neo4j&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Cvoya.Graph.Neo4j&version=1.0.0
                    
Install as a Cake Tool

Downloadable open-source computer software from CVOYA. See the CVOYA software catalog.

Cvoya.Graph.Neo4j

NuGet License

Neo4j provider for CVOYA graph - enables your applications to work with Neo4j graph databases using the CVOYA graph abstractions and LINQ-style querying.

🚀 Quick Start

dotnet add package Cvoya.Graph.Neo4j
using Cvoya.Graph;
using Cvoya.Graph.Neo4j;

// Configure connection
await using var store =
    new Neo4jGraphStore("neo4j+s://your-server:7687", "neo4j", "your-password");
var graph = store.Graph;

// Use CVOYA graph APIs
var users = await graph.Nodes<User>()
    .Where(u => u.IsActive)
    .OrderBy(u => u.CreatedDate)
    .ToListAsync();

📦 Core Features

  • Full CVOYA graph compatibility - Works seamlessly with all CVOYA graph abstractions
  • Cypher query generation - Automatic translation from LINQ to optimized Cypher
  • Connection pooling - Built-in connection management and pooling
  • Transaction support - Full ACID transactions with Neo4j
  • Index management - Automatic index creation from entity attributes
  • Complex type handling - Serialization of complex properties and collections

Neo4j owns physical node and relationship identity. CVOYA Graph does not expose it through IEntity; use optional [Property(IsKey = true)] domain keys or ordinary domain predicates when an operation needs to select an entity. Keyless entities remain valid.

Ordinary read-only query execution does not initialize schema or create indexes. Write paths initialize the schema artifacts required by the registered model.

🏗️ Architecture

This provider implements:

  • IGraph - Main graph operations against Neo4j
  • IGraphQueryProvider - LINQ-to-Cypher query translation
  • IGraphTransaction - Neo4j transaction wrapper
  • Connection management - Efficient Neo4j driver usage

🔧 Configuration

var store = new Neo4jGraphStore("neo4j+s://localhost:7687", "neo4j", "password");
var graph = store.Graph;

Concurrent schema initialization

Independent Neo4jGraphStore instances may safely initialize the same database at the same time, including configured constraints, range indexes, and the provider's general full-text indexes. Retryable Neo4j schema failures are replayed through driver-managed transactions. If concurrent creation reports a non-retryable schema conflict, the provider treats it as success only when the installed object's name, entity type, labels or relationship types, properties, and schema kind are equivalent to the requested definition. An incompatible existing object still fails with the original Neo4j error.

The provider-owned general full-text indexes (node_fulltext_index and rel_fulltext_index) are the exception: their exact names and matching node/relationship full-text kinds are reserved as the ownership marker. Their definition is derived from the whole registered model, so it legitimately changes as the model evolves. When their installed definition no longer matches the current model, the provider drops and recreates them during initialization instead of failing.

RecreateManagedIndexesAsync rebuilds only positively owned indexes. A configured range index is owned only when its deterministic name, kind, entity type, label/type, and properties all match the current registered model. A stale range index that is no longer described by that model is preserved because its ownership can no longer be proved. The two exact reserved full-text indexes remain positively owned when their model-derived definition is stale; they are rebuilt when still configured and removed when the current model no longer requires them. External indexes, same-named incompatible range indexes, and every uniqueness-backed index are preserved.

Calls on one graph instance are serialized. Independent equivalent callers converge on the same installed definitions through metadata-checked conflict handling. Callers using different models against the same database must coordinate their maintenance operations. Successful completion means every configured managed index is online and usable. Cancellation or failure can leave only a positively owned index absent or not yet online; retrying the operation restores the configured managed set without expanding the ownership boundary.

📚 Documentation

For comprehensive documentation, examples, and best practices:

🌐 Complete Documentation

🤝 Contributing

Contributions are welcome! Please see our Contributing Guide.

📄 License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.


Need help? Check the troubleshooting guide or open an issue.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  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

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 35 7/23/2026
1.0.0-alpha.20260717 76 7/17/2026