【问题标题】:How to return the created entity with MediatR如何使用 MediatR 返回创建的实体
【发布时间】:2022-02-05 03:02:38
【问题描述】:

根据Command Query Separation principle,命令应返回 void。

我正在使用MediatR 命令请求处理程序来创建一个实体,如下所示。那么如何取回创建的实体呢?


public class CreateCompanyCommand : IRequest
{
  public string Name { get; set; } = default!;
}

public class CreateCompanyHandler : IRequestHandler<CreateCompanyCommand>
{
  private readonly IRepository<Company> _repository;

  public CreateCompanyHandler(IRepository<Company> repository)
  {
    _repository = repository;
  }

  public async Task<Unit> Handle(CreateCompanyCommand request, CancellationToken cancellationToken)
  {
    var newCompany = new Company(request.Name);
    var createdItem = await _repository.AddAsync(newCompany);
    return Unit.Value;
  }
}

我看到了this questionits answer here,但我还是不清楚。

如何返回 createdItem? Unit.Value 应该是什么?我可以自己修改和返回自定义的东西而不是 Unit.Value 吗?

【问题讨论】:

    标签: asp.net-core mediatr


    【解决方案1】:

    如果您真的想要返回创建的值,您可以更改您的请求/处理程序以返回它:

    public class CreateCompanyCommand : IRequest<Company>
    {
      public string Name { get; set; } = default!;
    }
    
    
    public class CreateCompanyHandler : IRequestHandler<CreateCompanyCommand, Company>
    {
      private readonly IRepository<Company> _repository;
        
      public CreateCompanyHandler(IRepository<Company> repository)
      {
        _repository = repository;
      }
        
      public async Task<Unit> Handle(CreateCompanyCommand request, CancellationToken cancellationToken)
      {
        var newCompany = new Company(request.Name);
        var createdItem = await _repository.AddAsync(newCompany);
        return newCompany;
      }
    }
    

    没有什么强迫你这样做 - 命令不应该在 CQRS中返回任何东西,但mediatr不会强迫你这样做。 p>

    另一种方法是在命令中创建 id(并在调用者或命令的 ctor 中初始化 id)

    public class CreateCompanyCommand : IRequest<Company>
    {
      public Guid Id {get; set;}
      public string Name { get; set; } = default!;
    }
    

    致电 mediatr 您的问题,然后查询您刚刚创建的公司。

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多