如何 return 使用 MediatR 创建的实体
How to return the created entity with MediatR
根据 Command Query Separation principle,命令应该 return 无效。
我正在使用 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 question as well as its answer here,但还是不太清楚
如何 return createdItem? Unit.Value 应该是什么?我可以修改 return 自己定制的东西而不是 Unit.Value 吗?
如果你真的想要回创建的值,你可以将你的请求/处理程序更改为return它:
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;
}
}
没有什么强迫你不这样做 - 命令不应该 return 纯 CQRS 中的任何东西,但 mediatr 不会强迫你这样做。
另一种方法是在命令中创建 id(并在调用者或命令的 ctor 中初始化 id)
public class CreateCompanyCommand : IRequest<Company>
{
public Guid Id {get; set;}
public string Name { get; set; } = default!;
}
根据您的问题致电 mediatr,然后查询您刚创建的公司。
根据 Command Query Separation principle,命令应该 return 无效。
我正在使用 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 question as well as its answer here,但还是不太清楚
如何 return createdItem? Unit.Value 应该是什么?我可以修改 return 自己定制的东西而不是 Unit.Value 吗?
如果你真的想要回创建的值,你可以将你的请求/处理程序更改为return它:
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;
}
}
没有什么强迫你不这样做 - 命令不应该 return 纯 CQRS 中的任何东西,但 mediatr 不会强迫你这样做。
另一种方法是在命令中创建 id(并在调用者或命令的 ctor 中初始化 id)
public class CreateCompanyCommand : IRequest<Company>
{
public Guid Id {get; set;}
public string Name { get; set; } = default!;
}
根据您的问题致电 mediatr,然后查询您刚创建的公司。