[Failed] Try to implement NativeAOT support.
Add: NativeAOT support with EF Core. However failed for compiled binary throw Exception in queries. Wait for a stable support for NativeAOT. Add: document for intergration EF Core with NativeAOT.
This commit is contained in:
82
OptixServe.Infrastructure/EFCore-NativeAOT-Intergration.md
Normal file
82
OptixServe.Infrastructure/EFCore-NativeAOT-Intergration.md
Normal file
@ -0,0 +1,82 @@
|
||||
# EFCore Intergration
|
||||
|
||||
## Introduction
|
||||
|
||||
This app relies on EF Core to access the database.
|
||||
|
||||
However, it is NOT so smooth when work with NativeAOT.
|
||||
|
||||
To use EF Core, see below.
|
||||
|
||||
## DesignTimeDbContextFactory
|
||||
|
||||
To work with NativeAOT, a code-defined way to create DbContext instance is a MUST in nearly ALL operations of EF Core, letting ef tool discover the DbContext.
|
||||
|
||||
In this project, `OptixServe.Infrastructure/Utilites/DesignTimeDbContextFactory.cs` is set up to do this.
|
||||
|
||||
This class implements a simple commandline arguments parser, enabling passing arguments along with `dotnet ef`.
|
||||
|
||||
Currently, there are two options, `--config/-c` and `--data-dir/-d` are supported. See documents there.
|
||||
|
||||
To pass arguments/options to `CreateDbContext` static method, pass the arguments following with `dotnet ef` command, with two dashes splitting.
|
||||
|
||||
For example:
|
||||
|
||||
```bash
|
||||
dotnet ef database update -- -c ../data/appsettings.Development.json -d ../data/
|
||||
```
|
||||
|
||||
## Workflow
|
||||
|
||||
To make the code work, following the steps:
|
||||
|
||||
1. Implement other parts
|
||||
2. Compile the data models, with `--nativeaot` option.
|
||||
3. Add migration
|
||||
4. Update database
|
||||
5. Build project, and Run!
|
||||
|
||||
Here are the details.
|
||||
|
||||
### Requirements
|
||||
|
||||
See [https://learn.microsoft.com/en-us/ef/core/performance/nativeaot-and-precompiled-queries]()
|
||||
|
||||
### Compile Models
|
||||
|
||||
```bash
|
||||
dotnet ef dbcontext optimize --output-dir Data/CompiledModels --precompile-queries --nativeaot -- -c ../data_dev/appsettings.Development.json -d ../data_dev/
|
||||
```
|
||||
|
||||
If this is the first time to run `dbcontext optimize`, DO NOT forget to `UseModel` in DbContext construction.
|
||||
|
||||
```cs OptixServe.Infrastructure/Utilites/DatabaseHelper.cs
|
||||
public static void ConfigureDbContext(DbContextOptionsBuilder options)
|
||||
{
|
||||
// ...
|
||||
options.UseSqlite(connectionString, b => b.MigrationsAssembly("OptixServe.Infrastructure"))
|
||||
.UseModel(AppDbContextModel.Instance);
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Add Migration
|
||||
|
||||
```bash
|
||||
dotnet ef migrations add InitialCreate -- -c ../data_dev/appsettings.Development.json
|
||||
```
|
||||
|
||||
|
||||
### Update Database
|
||||
|
||||
```bash
|
||||
dotnet ef database update -- -c ../data_dev/appsettings.Development.json -d ../data_dev/
|
||||
```
|
||||
|
||||
|
||||
### Build Project
|
||||
|
||||
```bash
|
||||
dotnet publish -c Release -r linux-x64
|
||||
```
|
Reference in New Issue
Block a user