diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9018c93..30acf5d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,17 @@ jobs: - name: Build and run unit tests 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 run: dotnet build Examples/StandaloneWebServer/Esiur.Examples.StandaloneWebServer.csproj --configuration Release --no-restore --verbosity minimal diff --git a/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj b/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj index 4ebe22b..f1d5980 100644 --- a/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj +++ b/Stores/Esiur.Stores.EntityCore/Esiur.Stores.EntityCore.csproj @@ -10,6 +10,7 @@ true Esiur.Stores.EntityCore 3.0.0 + README.md latest MIT @@ -20,6 +21,7 @@ + diff --git a/Stores/Esiur.Stores.EntityCore/README.md b/Stores/Esiur.Stores.EntityCore/README.md new file mode 100644 index 0000000..00fda42 --- /dev/null +++ b/Stores/Esiur.Stores.EntityCore/README.md @@ -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? options = null; +options = new DbContextOptionsBuilder() + .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 options) + : DbContext(options) +{ + public DbSet Devices => Set(); +} +``` + +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. diff --git a/Tools/Esiur.CLI/Esiur.CLI.csproj b/Tools/Esiur.CLI/Esiur.CLI.csproj index 3099774..45634f9 100644 --- a/Tools/Esiur.CLI/Esiur.CLI.csproj +++ b/Tools/Esiur.CLI/Esiur.CLI.csproj @@ -3,13 +3,12 @@ Esiur command-line tool Ahmed Kh. Zamil - http://www.esiur.com - true 3.0.0 + Esiur.CLI Ahmed Kh. Zamil Esiur Foundation - http://www.esiur.com + https://www.esiur.com/ https://github.com/esiur/esiur-dotnet/ README.md @@ -19,10 +18,10 @@ net10.0 enable enable - Esiur.Cli + Esiur.CLI Esiur.CLI - true - true + true + true false false diff --git a/Tools/Esiur.CLI/README.md b/Tools/Esiur.CLI/README.md index 9d82324..a7990e5 100644 --- a/Tools/Esiur.CLI/README.md +++ b/Tools/Esiur.CLI/README.md @@ -9,10 +9,10 @@ The project targets .NET 10: ```console dotnet build Tools/Esiur.CLI/Esiur.CLI.csproj 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