Поделиться через


Интеграция Community Toolkit SQLite с Entity Framework .NET.NET Aspire

Включает:интеграция хостинга включена интеграция хостинга — и — Client интеграция включенаClient Интеграция

Заметка

Эта интеграция входит в состав набора средств сообщества .NET.NET Aspire и .

SQLite — это упрощенный, бессерверный, автономный ядро СУБД SQL, широко используемый для локального хранилища данных в приложениях. Интеграция .NET Aspire SQLite предоставляет способ использования баз данных SQLite в приложениях .NET Aspire и доступа к ним с помощью пакета поддержки Entity Framework Microsoft.EntityFrameworkCore.Sqlite.

Интеграция хостинга

Интеграция хостинга SQLite моделирует базу данных SQLite как тип SQLiteResource и создаёт файл базы данных в указанном расположении. Чтобы получить доступ к этим типам и API, которые позволяют добавлять пакет NuGet 📦CommunityToolkit.Aspire.Hosting.SQLite в проект app host.

dotnet add package CommunityToolkit.Aspire.Hosting.SQLite

Дополнительные сведения вы можете найти в статьях dotnet add package или Управление зависимостями пакетов в .NET приложениях.

Добавление ресурса SQLite

В проекте хоста приложения зарегистрируйте и используйте интеграцию SQLite с помощью метода расширения AddSQLite, чтобы добавить базу данных SQLite в конструктор приложения.

var builder = DistributedApplication.CreateBuilder(args);

var sqlite = builder.AddSQLite("my-database");

var exampleProject = builder.AddProject<Projects.ExampleProject>()
                            .WithReference(sqlite);

Когда .NET.NET Aspire добавляет базу данных SQLite на узел приложения, как показано в предыдущем примере, создается новый файл SQLite в временном каталоге пользователя.

Кроме того, если вы хотите указать пользовательское расположение для файла базы данных SQLite, укажите соответствующие аргументы для метода AddSqlite.

var sqlite = builder.AddSQLite("my-database", "C:\\Database\\Location", "my-database.db");

Добавление ресурса SQLiteWeb

При добавлении ресурса SQLite можно также добавить ресурс SQLiteWeb, который предоставляет веб-интерфейс для взаимодействия с базой данных SQLite. Для этого используйте метод расширения WithSqliteWeb.

var sqlite = builder.AddSQLite("my-database")
                    .WithSqliteWeb();

Этот код добавляет контейнер, основанный на ghcr.io/coleifer/sqlite-web, в хост приложения, который предоставляет веб-интерфейс для взаимодействия с подключенной базой данных SQLite. Каждый экземпляр SQLiteWeb подключен к одной базе данных SQLite, то есть при добавлении нескольких экземпляров SQLiteWeb будет несколько контейнеров SQLiteWeb.

Добавление расширений SQLite

SQLite поддерживает расширения, которые можно добавить в базу данных SQLite. Расширения можно предоставлять с помощью пакета NuGet или с помощью расположения на диске. Используйте методы расширения WithNuGetExtension или WithLocalExtension для добавления расширений в базу данных SQLite.

Заметка

Поддержка расширений SQLite считается экспериментальной и создает предупреждение CTASPIRE002.

интеграция Client

Чтобы приступить к работе с интеграцией клиента .NET.NET Aspire SQLite EF, установите 📦 CommunityToolkit.Aspire. Microsoft.EntityFrameworkCore.Sqlite пакет NuGet в проекте, использующем клиент, то есть приложении, использующем клиент SQLite. Интеграция клиента SQLite регистрирует экземпляр SqliteConnection, который можно использовать для взаимодействия с SQLite.

dotnet add package CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite

Добавление клиента Sqlite

В файле Program.cs проекта, используемого клиентом, вызовите метод расширения Microsoft.Extensions.Hosting.AspireEFSqliteExtensions.AddSqliteDbContext для любой IHostApplicationBuilder, чтобы зарегистрировать подкласс DbContext для использования через контейнер внедрения зависимостей. Метод принимает параметр имени подключения.

builder.AddSqliteDbContext<YourDbContext>(connectionName: "sqlite");

Совет

Параметр connectionName должен соответствовать имени, используемому при добавлении ресурса SQLite в проект узла приложения. Дополнительные сведения см. в статье Добавление ресурса SQLite.

После добавления YourDbContext в построитель можно получить экземпляр YourDbContext с помощью внедрения зависимостей. Например, чтобы получить объект источника данных из примера службы, определите его как параметр конструктора и убедитесь, что класс ExampleService зарегистрирован в контейнере внедрения зависимостей:

public class ExampleService(YourDbContext context)
{
    // Use context...
}

Дополнительные сведения о внедрении зависимостей см. в .NET.

Обогащение контекста базы данных SQLite

Вы можете использовать стандартный метод Entity Framework для получения контекста базы данных и добавления его в контейнер внедрения зависимостей:

builder.Services.AddDbContext<YourDbContext>(options =>
    options.UseSqlite(builder.Configuration.GetConnectionString("sqlite")
        ?? throw new InvalidOperationException("Connection string 'sqlite' not found.")));

Заметка

Имя строки подключения, передаваемое методу GetConnectionString, должно соответствовать имени, используемому при добавлении ресурса SQLite в проект узла приложения. Дополнительные сведения см. в статье Добавление ресурса SQLite.

Конфигурация

Интеграция клиента SQLite предоставляет несколько подходов к конфигурации и параметров для удовлетворения требований и соглашений проекта.

Используйте строку подключения

При использовании строки подключения из раздела конфигурации ConnectionStrings можно указать имя строки подключения при вызове метода Microsoft.Extensions.Hosting.AspireEFSqliteExtensions.AddSqliteDbContext:

builder.AddSqliteDbContext<YourDbContext>("sqlite");

Затем строка подключения будет получена из раздела конфигурации ConnectionStrings.

{
  "ConnectionStrings": {
    "sqlite": "Data Source=C:\\Database\\Location\\my-database.db"
  }
}

Использование поставщиков конфигураций

Интеграция клиента SQLite поддерживает Microsoft.Extensions.Configuration. Загрузка Microsoft.Extensions.Hosting.SqliteConnectionSettings из appsettings.json или других поставщиков конфигурации осуществляется с помощью ключа Aspire:Sqlite:EntityFrameworkCore:Sqlite. Пример _appsettings.json, который настраивает некоторые параметры:

{
  "Aspire": {
    "Sqlite": {
      "EntityFrameworkCore": {
        "Sqlite": {
          "ConnectionString": "Data Source=C:\\Database\\Location\\my-database.db",
          "DisableHealthCheck": true
        }
      }
    }
  }
}