Я проектирую свои хранилища, и у меня есть сомнения. Например, при создании нового пользователя я должен добавлять записи в разные таблицы. Сейчас я использую что-то вроде:Должны ли хранилища быть атомарными?
public User CreateNewUser()
{
try
{
using (var con = new SqlConnection(_SecureConnectionString))
{
con.Open();
using (var transaction = con.BeginTransaction())
{
User user = //User Repository query to INSERT the user on dbo.Users and return object
user.Items = // Item Repository query to INSERT on dbo.Items that have a FK to dbo.Users
user.Whatever = // Whatever repository call to INSERT on tables that are related to the new user
transaction.Commit();
}
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
}
Мой вопрос, если создание нового пользователя, и всегда должны создавать записи на разных таблицах, управляемых другими хранилищами, я должен избегать так атомное и сделать это на один запрос в UserRepository, даже если он вставляется в другие таблицы? Я делаю 3 обращения к базе данных, когда могу сделать это на одном.
Есть ли причина, по которой вы не используете сущность framework? – Fran
Как прокомментировал Зоран, это часть решения игрового сервера, инфраструктура Entity слаба по скорости по сравнению с dapper. Для этого конкретного случая (создания пользователя при регистрации) мне не нужно быть быстрым, но это не всегда так. – Nauzet
Вам не хватает единицы работы, которая будет координировать транзакцию между репозиториями. – plalx