您是否 return 来自 ASP.Net 核心存储库的 ObjectResult

Do you return an ObjectResult from your repository in ASP.Net Core

在 ASP.NET 核心应用程序中,我在绝大多数控制器路由上使用 Task<IActionResult>。但是,我也在尝试使用存储库。 NotFound()Ok(ret) 控制器 return 之类的东西在存储库中不可用。

我通过使用这些方法 return 和 Task<ObjectResult> 开始存储库,因为它们可以很好地传递给控制器​​,但后来我很快发现许多 "normal"我希望不存在。例如,我必须自己制作 CreateObjectResultNoContentObjectResult 等...

是否有比 return 更好的类型,以便我的存储库方法可以轻松地支持 returning 数据或适当的错误响应?

理想情况下,存储库应该 return 领域模型以防实施 DDD。在这种情况下,域模型本身映射为实体。

如果未实现 DDD,它应该 return 映射的实体。

存储库应该只关注数据库需求。它不应该处理任何其他问题,如 HTTP、业务逻辑等。因此,它不应该 return ObjectResult 或 DTO 或任何其他不属于数据访问的类型。要了解有关 DTO、实体等术语的更多信息,请参阅 答案。

I'm also trying to use repositories. The things like NotFound() or Ok(ret) that a controller would return aren't available in the repository.

他们不应该。使用额外的逻辑在存储库外实现它。;

Is there a better type to return so that my repository methods support easily returning either data or the appropriate error response?

如上所述,return 映射的实体。对于错误,请考虑从存储库中抛出异常。处理调用(控制器)代码中的那些。

以防万一您使用的是完整的 ORM,请查看 答案。