Где открывать, сохранять UnitOfWork?

Вот пытаюсь освоить подход CQRS или Command/Query.
Примеры кода из интернетов.
Пример1.
public class CreateUserCommandHandler : EFCommandHandlerBase<CreateUserCommand, ApplicationDbContext>,
ICommandHandler<CreateUserCommand>
{
public CreateUserCommandHandler(ApplicationDbContext dbContext)
: base(dbContext)
{
}

public override void Execute(CreateUserCommand command)
{
Debug.WriteLine("CreateUserCommandHandler executed");

int id = DbContext.Users.Any() == false ? 1 : DbContext.Users.Max(x => x.Id) + 1;
User user = new User
{
Id = id,
FirstName = command.FirstName,
LastName = command.LastName,
Email = command.Email,
IsActive = false
};

DbContext.Users.Add(user);
DbContext.SaveChanges();

command.Id = user.Id;
}
}

вроде как такой подход не совсем правильный, т.к команда может быть частью одной транзакции.
так же видел реализацию через Repository
Пример2
public class CreateStaffCommand : ICommand<CreateStaffCommandContext>
    {
        private readonly IRepository<Staff> _repository;

        public CreateStaffCommand(IRepository<Staff> repository)
        {
            _repository = repository;
        }

        public void Execute(CreateStaffCommandContext commandContext)
        {
            _repository.Add(new Staff(commandContext.Form.Name, commandContext.Form.Quantity));
        }
    }

такой вариант больше нравится, только вот не могу понять где лучше сохранять транзакцию?
  • Вопрос задан
  • 2773 просмотра
Пригласить эксперта
Ответы на вопрос 1
iremezoff
@iremezoff
Держите, тут хорошо описано (ещё одна ссылка из инетов):
www.wekeroad.com/2014/03/04/repositories-and-unito...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы