Cvoya.Graph.InMemory
1.0.0
Prefix Reserved
dotnet add package Cvoya.Graph.InMemory --version 1.0.0
NuGet\Install-Package Cvoya.Graph.InMemory -Version 1.0.0
<PackageReference Include="Cvoya.Graph.InMemory" Version="1.0.0" />
<PackageVersion Include="Cvoya.Graph.InMemory" Version="1.0.0" />
<PackageReference Include="Cvoya.Graph.InMemory" />
paket add Cvoya.Graph.InMemory --version 1.0.0
#r "nuget: Cvoya.Graph.InMemory, 1.0.0"
#:package Cvoya.Graph.InMemory@1.0.0
#addin nuget:?package=Cvoya.Graph.InMemory&version=1.0.0
#tool nuget:?package=Cvoya.Graph.InMemory&version=1.0.0
Downloadable open-source computer software from CVOYA. See the CVOYA software catalog.
Cvoya.Graph.InMemory
An in-process, in-memory provider for the CVOYA graph abstraction. It exists for two audiences:
- Application developers who want a fast unit-test double: test business logic against
IGraphwith no database and no containers. - Provider implementers who want an executable specification: this provider passes the
Cvoya.Graph.CompatibilityTestssuite by interpreting the shared provider-neutral query model (GraphQueryModel) with LINQ-to-objects — no query language anywhere — which is the working proof that the level-1 query model is dialect-free.
Usage
using Cvoya.Graph;
using Cvoya.Graph.InMemory;
await using var store = new InMemoryGraphStore();
var graph = store.Graph;
await graph.CreateNodeAsync(new Person { Name = "Alice" });
var alice = await graph.Nodes<Person>().Where(p => p.Name == "Alice").SingleAsync();
Everything on IGraph behaves per the public contract: CRUD, LINQ querying (including
traversals and path segments), transactions, streaming, and cancellation. Complex properties are
stored decomposed as owned value nodes linked by property-named relationships, exactly like the
Neo4j provider, so cascade and hydration semantics are real, not object aliasing. Entities
round-trip through the serialization layer on every write and read: mutating an entity you hold
never mutates the store.
Not a production store
- Data lives in process memory; nothing is persisted.
- Queries are unindexed scans; there is no query optimization.
RecreateManagedIndexesAsyncis a successful no-op because the provider owns no index artifacts.- Concurrency model: transactions buffer their writes and commit atomically under a single store-wide lock (single-writer serialized commits; reads take lock-free snapshots). This is simple and correct for a test double, not a throughput design.
- Full-text search (
GraphCapability.FullTextSearch) is supported at the contract floor only: naive, index-free, whole-word matching over each entity's own searchable string properties. No stemming, ranking, prefix, or substring matching.
See docs/testing-with-the-in-memory-provider.md in the repository for the full guide.
| Product | Versions 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. |
-
net10.0
- Cvoya.Graph (>= 1.0.0)
- Cvoya.Graph.Serialization (>= 1.0.0)
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 | 36 | 7/23/2026 |
| 1.0.0-alpha.20260717 | 46 | 7/17/2026 |