Titanic.Entity
1.1.2
dotnet add package Titanic.Entity --version 1.1.2
NuGet\Install-Package Titanic.Entity -Version 1.1.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Titanic.Entity" Version="1.1.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Titanic.Entity" Version="1.1.2" />
<PackageReference Include="Titanic.Entity" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Titanic.Entity --version 1.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Titanic.Entity, 1.1.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Titanic.Entity@1.1.2
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Titanic.Entity&version=1.1.2
#tool nuget:?package=Titanic.Entity&version=1.1.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Titanic.Entity
Роль
Titanic.Entity — ORM-слой поверх Titanic.Db. Он связывает Entity-модели, metadata, ORM-пути, локализацию, runtime-менеджеры и HTTP API.
Порядок слоёв:
Titanic.Common -> Titanic.Db -> Titanic.Entity
Если нужен только SQL builder без metadata и HTTP API, используйте Titanic.Db.
Когда использовать
Используйте Titanic.Entity, если нужно:
- описывать таблицы через Entity-модели и атрибуты;
- строить запросы по ORM-путям вместо ручного SQL;
- работать с
DisplayValueи локализуемыми колонками; - сохранять и удалять сущности через единый ORM-слой;
- публиковать HTTP API для frontend или внешних клиентов.
Основные части
Менеджеры
EntityManager— основная точка регистрации и получения менеджеров.BaseEntityManager— обёртка надBaseDbProvider, содержащая провайдер, настройки API и runtime-опции.EntityDbManager— стандартная реализация менеджера.
ORM-запросы
EntitySchemaQuery— основная модель чтения сущностей.EntitySchemaQuery<TEntity>— generic-обёртка.ESQиESQ<TEntity>— alias-типы совместимости.EntitySelectBuilder— построитель ORM SELECT по путям колонок.EntityQueryColumnCollectionиEntityQueryColumn— описание выбираемых колонок.EntityQueryFilterCollectionиEntityQueryFilter— описание фильтров.EntityWhereItem— fluent API условий.
Сущности и metadata
Entity— ORM-сущность, представляющая строку БД.Structure— сканирует сборки и хранит metadata Entity-моделей.EntityStructure— описание таблицы.ColumnStructure— описание колонки.EntitySchemaValidator— проверка схемы БД при инициализации менеджера.
HTTP API
ServiceCollectionExtensions— регистрация сервисов Entity ORM в DI.WebApplicationExtensions— публикация HTTP endpoint-ов.EntityManagerConfig,EntityManagerSettings,EntityManagerApiSettings,EntityManagerOptions— конфигурация менеджеров и API.EntityApiRequestиEntityApiBatchRequest— модели HTTP-запросов.EntityApiOperationType— операцииSelect,Save,Delete.EntityApiBatchExecutionMode— режимыSequentialиParallel.
Пример Entity-модели
using Titanic.Db.Enums;
using Titanic.Entity.Attributes;
[Entity("departments")]
public sealed class DepartmentEntity
{
[PrimaryColumn("id", DataValueType.Guid)]
public int Id { get; set; }
[DisplayColumn("name", isLocalized: true)]
public string Name { get; set; } = string.Empty;
[StringColumn("description", isLocalized: true)]
public string? Description { get; set; }
}
Пример запроса
var rows = EntityManager
.Query<PostgresEntityManager, EmployeeEntity>(userConnection)
.AddColumn("Id")
.AddColumn("Name")
.AddColumn("DepartmentId.Name", "DepartmentName")
.AddFilter(EntityComparisonType.Contains, "Email", "@company.com")
.OrderBy("Name")
.GetEntityCollection();
Пример регистрации API
using Titanic.Db.WebApplication;
using Titanic.Entity.WebApplication;
var builder = WebApplication.CreateBuilder(args);
builder.AddTitanicDb("TitanicDb");
builder.AddTitanicEntityApi("TitanicEntity");
var app = builder.Build();
app.MapTitanicEntityApi();
app.Run();
Пример конфигурации
{
"TitanicEntity": {
"Managers": [
{
"Name": "posgreTest",
"DbProviderName": "posgreTest",
"ManagerType": "MyApp.EntityManagers.PostgresEntityManager, MyApp",
"EntityModelNamespaces": [
"MyApp.EntityModels.*"
],
"Api": {
"AutoRegisterEndpoint": true,
"Path": "/entity/posgreTest",
"AuthorizationHeaderName": "X-Entity-Key",
"AuthorizationProviderType": "MyApp.Security.EntityApiUserConnectionProvider, MyApp",
"StructureAuthorizationProviderType": "MyApp.Security.EntityStructureUserConnectionProvider, MyApp",
"DefaultBatchExecutionMode": "Sequential"
},
"ValidateDatabaseSchemaOnCompile": true,
"Options": {
"MaxReadRowCount": 20000
}
}
]
}
}
Ключевые настройки:
DbProviderName— имя провайдера, зарегистрированного вTitanic.Db.ManagerType— тип пользовательского менеджера поверхBaseEntityManager.EntityModelNamespaces— namespace-patterns для manager-specific структуры.Api.Path— базовый route менеджерского HTTP API.Api.AuthorizationProviderType— тип пользовательского провайдера, который ищетUserConnectionпо токену для обычных endpoint-ов.Api.StructureAuthorizationProviderType— тип отдельного пользовательского провайдера для endpoint-а структуры.Options.MaxReadRowCount— максимальное количество строк в одном read-запросе.
Авторизация Entity API
Поток запроса:
Клиент
-> X-Entity-Key
-> Пользовательское backend-приложение
-> IUserConnectionTokenProvider
-> UserConnection
-> Titanic.Entity
-> Titanic.Db
Разделение ответственности:
Titanic.Commonзадаёт только базовый контрактUserConnectionи интерфейсIUserConnectionTokenProvider.Titanic.Entityчитает токен изApi.AuthorizationHeaderName, вызывает пользовательский provider и работает только с возвращённымUserConnection.- пользовательское приложение само решает, где искать токен, как валидировать пользователя и как заполнять расширенный пользовательский контекст;
- если приложению нужны дополнительные поля, оно наследует свой тип от
UserConnection; - если provider не вернул пользователя, Entity API отвечает
403 Forbidden; - endpoint структуры использует отдельный provider
Api.StructureAuthorizationProviderType, поэтому решение о доступе к структуре полностью остаётся на стороне пользовательского приложения.
Важные особенности
- имя таблицы в
[Entity("...")]задаётся без схемы; - локализуемые колонки читаются через
sys_[table_name]_lcz; - каждый менеджер строит свою собственную структуру через
EntityModelNamespaces; UserConnectionобязателен для чтения, сохранения, удаления и локализации;- HTTP API — это thin layer над Entity ORM, а не отдельная бизнес-логика.
Куда смотреть дальше
- обзор архитектуры: ../ARCHITECTURE.md
- JSON-контракт API: ENTITY_API.md
- SQL builder: ../Titanic.Db/README.md
Связанные документы
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net9.0
- Titanic.Db (>= 1.1.2)
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.1.2 | 155 | 6/7/2026 |