This commit is contained in:
2026-07-19 01:06:23 +03:00
parent a4b5702090
commit cf7b2f92a0
5 changed files with 89 additions and 8 deletions
+11
View File
@@ -27,6 +27,17 @@ jobs:
- name: Build and run unit tests - name: Build and run unit tests
run: dotnet test Tests/Unit/Esiur.Tests.Unit.csproj --configuration Release --no-restore --verbosity minimal run: dotnet test Tests/Unit/Esiur.Tests.Unit.csproj --configuration Release --no-restore --verbosity minimal
- name: Build and run CLI tests
run: dotnet test Tests/Esiur.CLI.Tests/Esiur.CLI.Tests.csproj --configuration Release --no-restore --verbosity minimal
- name: Pack and install CLI tool
shell: pwsh
run: |
dotnet pack Tools/Esiur.CLI/Esiur.CLI.csproj --configuration Release --no-build --no-restore --output artifacts/nuget
dotnet tool install Esiur.CLI --version 3.0.0 --tool-path artifacts/tool --add-source artifacts/nuget
& ./artifacts/tool/esiur.exe version
& ./artifacts/tool/esiur.exe --help
- name: Build standalone web example - name: Build standalone web example
run: dotnet build Examples/StandaloneWebServer/Esiur.Examples.StandaloneWebServer.csproj --configuration Release --no-restore --verbosity minimal run: dotnet build Examples/StandaloneWebServer/Esiur.Examples.StandaloneWebServer.csproj --configuration Release --no-restore --verbosity minimal
@@ -10,6 +10,7 @@
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>Esiur.Stores.EntityCore</PackageId> <PackageId>Esiur.Stores.EntityCore</PackageId>
<Version>3.0.0</Version> <Version>3.0.0</Version>
<PackageReadmeFile>README.md</PackageReadmeFile>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup> </PropertyGroup>
@@ -20,6 +21,7 @@
<ItemGroup> <ItemGroup>
<None Include="EntityResource.cs" /> <None Include="EntityResource.cs" />
<None Include="README.md" Pack="true" PackagePath="\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
+69
View File
@@ -0,0 +1,69 @@
# Esiur Entity Framework Core Store
`Esiur.Stores.EntityCore` integrates Esiur resource materialization and paths
with Entity Framework Core 10. Version 3.0 targets .NET 10.
## Installation
```shell
dotnet add package Esiur.Stores.EntityCore --version 3.0.0
dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 10.0.10
```
Install the package for the database provider used by your application before
configuring Esiur.
## Usage
Configure the database provider first, then attach an `EntityStore` using
`UseEsiur`:
```csharp
using Esiur.Resource;
using Esiur.Stores.EntityCore;
using Microsoft.EntityFrameworkCore;
var warehouse = new Warehouse();
var store = await warehouse.Put("database", new EntityStore());
DbContextOptions<AppDbContext>? options = null;
options = new DbContextOptionsBuilder<AppDbContext>()
.UseSqlite("Data Source=app.db")
.UseEsiur(store, () => new AppDbContext(options!))
.Options;
await warehouse.Open();
await using var db = new AppDbContext(options);
await db.Database.EnsureCreatedAsync();
var device = await db.Devices.AddResourceAsync(
new Device { Name = "sensor-1" });
```
An entity exposed as an Esiur resource can use the source generator:
```csharp
using System.ComponentModel.DataAnnotations;
using Esiur.Resource;
using Microsoft.EntityFrameworkCore;
[Resource]
public partial class Device
{
[Key, Export]
int id;
[Export]
string name = string.Empty;
}
public sealed class AppDbContext(DbContextOptions<AppDbContext> options)
: DbContext(options)
{
public DbSet<Device> Devices => Set<Device>();
}
```
The `UseEsiur` extension works with any EF Core provider. The Esiur test suite
covers SQLite persistence and materialization, plus PostgreSQL and MySQL model
creation and SQL translation.
+5 -6
View File
@@ -3,13 +3,12 @@
<PropertyGroup> <PropertyGroup>
<Description>Esiur command-line tool</Description> <Description>Esiur command-line tool</Description>
<Copyright>Ahmed Kh. Zamil</Copyright> <Copyright>Ahmed Kh. Zamil</Copyright>
<PackageProjectUrl>http://www.esiur.com</PackageProjectUrl>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>3.0.0</Version> <Version>3.0.0</Version>
<PackageId>Esiur.CLI</PackageId>
<Authors>Ahmed Kh. Zamil</Authors> <Authors>Ahmed Kh. Zamil</Authors>
<Company>Esiur Foundation</Company> <Company>Esiur Foundation</Company>
<PackageProjectUrl>http://www.esiur.com</PackageProjectUrl> <PackageProjectUrl>https://www.esiur.com/</PackageProjectUrl>
<RepositoryUrl>https://github.com/esiur/esiur-dotnet/</RepositoryUrl> <RepositoryUrl>https://github.com/esiur/esiur-dotnet/</RepositoryUrl>
<PackageReadmeFile>README.md</PackageReadmeFile> <PackageReadmeFile>README.md</PackageReadmeFile>
@@ -19,10 +18,10 @@
<TargetFramework>net10.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<AssemblyName>Esiur.Cli</AssemblyName> <AssemblyName>Esiur.CLI</AssemblyName>
<RootNamespace>Esiur.CLI</RootNamespace> <RootNamespace>Esiur.CLI</RootNamespace>
<PublishSingleFile>true</PublishSingleFile> <PublishSingleFile Condition="'$(RuntimeIdentifier)' != ''">true</PublishSingleFile>
<SelfContained>true</SelfContained> <SelfContained Condition="'$(RuntimeIdentifier)' != ''">true</SelfContained>
<PublishTrimmed>false</PublishTrimmed> <PublishTrimmed>false</PublishTrimmed>
<PublishAot>false</PublishAot> <PublishAot>false</PublishAot>
+2 -2
View File
@@ -9,10 +9,10 @@ The project targets .NET 10:
```console ```console
dotnet build Tools/Esiur.CLI/Esiur.CLI.csproj dotnet build Tools/Esiur.CLI/Esiur.CLI.csproj
dotnet pack Tools/Esiur.CLI/Esiur.CLI.csproj -c Release dotnet pack Tools/Esiur.CLI/Esiur.CLI.csproj -c Release
dotnet tool install --global --add-source Tools/Esiur.CLI/nupkg Esiur.Cli dotnet tool install --global --add-source Tools/Esiur.CLI/nupkg Esiur.CLI
``` ```
The project is configured for self-contained, single-file, non-trimmed publishing. Platform release archives and installers are planned for the packaging phase. Runtime-specific publishes are configured as self-contained, single-file, and non-trimmed. The NuGet tool remains framework-dependent and requires .NET 10.
## Login and profiles ## Login and profiles