Шаблоны проектов
Семь точек старта в одном пакете. Каждый шаблон запускается как есть: SQLite с Pro, без сервера базы и без ключа лицензии.
dotnet new install redb.Templates
Дальше dotnet new <короткое имя> -n MyApp. Весь список: dotnet new list redb.
Что настроено в каждом шаблоне
- SQLite с Pro База — файл рядом с приложением, создаётся при первом запуске. Pro бесплатен на всей линейке 4.x.
- PVT-префильтр и ChangeTracking Оба включены в
Program.cs. Выборочный фильтр не читает всю схему, сохранение пишет только изменённые поля. - Кэш Props в одном комментарии По умолчанию выключен.
EnablePropsCache,PropsCacheMaxSizeиPropsCacheTtlлежат комментарием рядом с остальными настройками. - Docker и compose
Dockerfileи compose-файлы для PostgreSQL и SQL Server вdeploy/.
Другая база
Параметр --db есть только у redb. В остальных шаблонах переход — три правки, и каждый compose-файл повторяет их в шапке:
- в
.csprojзаменитьredb.SQLite.Proнаredb.Postgres.Proилиredb.MSSql.Pro; - в
Program.csзаменить.UseSqlite(...)на закомментированный.UsePostgres(...)или.UseMsSql(...); - вписать строку подключения в
appsettings.json. База должна существовать: RedBase создаёт свои таблицы, а не саму базу.
Свой хост или модуль Tsak
redb-worker, redb-chat и серверные части redb-app и redb-bff состоят из модуля и хоста. В модуле маршруты и public static InitRoute.main(IRouteContext). Хост строит контекст маршрутов и вызывает этот метод ровно так же, как воркер Tsak, поэтому код маршрутов существует в одном месте.
Настройки в обоих случаях собираются одинаково: сначала *.config.json модуля, затем секция Tsak:Contexts:<контекст>:Override конфигурации хоста, она главнее. Поэтому одна и та же переменная окружения, например Tsak__Contexts__myworker__Override__Folders__Inbox (контекст — имя проекта в нижнем регистре), работает и в своём хосте, и на воркере Tsak.
cp deploy/.env.example deploy/.env # заполнить значения Tsak
pwsh deploy/pack-tpkg.ps1 # -> deploy/output/<Name>.tpkg
docker compose -f deploy/docker-compose.tsak.yml up -dTsak__Redb__UsePro, Tsak__Redb__PropsSaveStrategy и Tsak__Redb__EnablePvtPrefilter в compose-файле дают ему те же настройки, что и в своём хосте.
A redb: консольное приложение
Основы RedBase в одном Program.cs: создать объект, загрузить, изменить, выбрать LINQ-запросом по своим свойствам, посчитать агрегат в базе, построить дерево из трёх уровней и удалить его вместе с потомками.
dotnet new redb -n MyApp
cd MyApp
dotnet run| Параметр | Значения | По умолчанию |
|---|---|---|
--db | sqlite, postgres, mssql | sqlite |
--pro | true, false | true |
Program.cs и заранее создайте базу.
B redb-razor: сайт на Razor Pages
Список товаров с поиском по имени, фильтром «в наличии», сортировкой и страницами, всё в базе: страница никогда не загружает больше одной страницы объектов. Форма создания и правки с проверкой полей и тестовые данные при первом запуске.
dotnet new redb-razor -n MySite
cd MySite
dotnet run # http://localhost:5080C redb-blazor: сайт на Blazor
Тот же список и форма на интерактивном Blazor Server, плюс дерево категорий: корни из древовидного запроса, поддеревья, добавить потомка, удалить узел вместе с поддеревом.
dotnet new redb-blazor -n MySite
cd MySite
dotnet run # http://localhost:5081IRedbService — это одно соединение, поэтому компоненты берут его через RedbWork, который открывает scope на каждую операцию, как IDbContextFactory в EF Core.
D redb-worker: интеграционный воркер
Файлы заказов приходят в папку, проверяются по XSD-схеме, сохраняются в RedBase одним шагом .Transacted(), и в ответ пишется файл-квитанция. Номер заказа — уникальный ключ объекта, поэтому повторный заказ получает ответ «дубликат», даже если две копии пришли одновременно.
dotnet new redb-worker -n MyWorker
cd MyWorker
dotnet run --project MyWorker.Host
# во втором терминале:
cp samples/order-1001.xml data/inbox/Для другого источника меняется одна строка From(...): Sftp.Directory(...) из redb.Route.Sftp, As2.Receive(...) из redb.Route.As2, Sql.Poll(...) из redb.Route.Sql.
E redb-chat: LLM-чат
Чат на redb.Route.Llm. История разговора хранится в RedBase, поэтому чат продолжается после перезапуска. Общаться можно в консоли или по HTTP; разговор выбирает заголовок X-Chat-Id.
dotnet new redb-chat -n MyChat
cd MyChat
# впишите ключ API в MyChat.Host/appsettings.json (ApiKey)
dotnet run --project MyChat.Host
curl -d "привет" -H "X-Chat-Id: my-chat" http://localhost:5090/api/chat| Параметр | Значения | Что добавляет |
|---|---|---|
--tools | none, shell, mcp | shell: инструмент-маршрут, который запускает несколько системных команд только для чтения. mcp: инструменты MCP-сервера файловой системы, привязанного к одной папке (нужен Node.js) |
--audit | true, false | Пользователь и теги аудита на каждом сохранённом сообщении и команда /audit, которая читает их LINQ-запросом |
ApiKey в appsettings.json и впишите ключ DeepSeek. Без ключа приложение останавливается при старте и называет файл и поле. HTTP-адрес слушает только 127.0.0.1: входа там нет, а каждый вызов тратит токены.
F redb-app: приложение на Blazor WebAssembly
Клиент на WebAssembly, который работает в браузере, и API на REST DSL redb.Route: вход, список и форма товаров, дерево категорий. Два процесса, как в продакшене.
dotnet new redb-app -n MyApp
cd MyApp
dotnet run --project MyApp.Host # API на http://localhost:5092
dotnet run --project MyApp.Web # клиент на http://localhost:5082, admin / adminPOST /api/auth/login возвращает подписанный токен. Остальные маршруты объявлены с InboundAuth = Bearer: запрос без действующего токена получает 401 до того, как маршрут выполнится. В разработке API отвечает на CORS для порта клиента, а при развёртывании nginx отдаёт клиент и проксирует /api/, и браузер видит один источник.
cp deploy/.env.example deploy/.env # APP_SIGNING_KEY, APP_ADMIN_PASSWORD
docker compose -f deploy/docker-compose.yml up --build # http://localhost:8080G redb-bff: Blazor BFF
Веб-сервер на Blazor Server, где пользователи входят с cookie-сессией, и бэкенд на контроллерах redb.Route, который принимает вызовы только от веб-сервера. Браузер не видит ни бэкенд, ни его ключ.
dotnet new redb-bff -n MyApp
cd MyApp
dotnet run --project MyApp.Host # бэкенд на http://127.0.0.1:5093
dotnet run --project MyApp.Web # веб-сервер на http://localhost:5083, admin / adminКонтроллеры берут IRedbService из запроса, Context.GetRedbService("", Exchange), поэтому параллельные запросы не делят соединение. Веб-сервер отправляет сервисный ключ как bearer-токен; любой другой вызывающий получает 401.
Сравнение
| Шаблон | Что это | Доступ к данным | Вход | Модуль Tsak |
|---|---|---|---|---|
redb | Консоль | IRedbService | - | нет |
redb-razor | Razor Pages | IRedbService на запрос | - | нет |
redb-blazor | Blazor Server | IRedbService на операцию | - | нет |
redb-worker | Воркер | Маршруты, ProcessWithRedb | - | да |
redb-chat | Консоль + HTTP | Маршруты, redb.Route.Llm | - | да |
redb-app | WebAssembly + API | REST DSL, ProcessWithRedb | JWT | да (API) |
redb-bff | Blazor Server + бэкенд | Контроллеры | Cookie | да (бэкенд) |