【发布时间】:2021-12-23 19:17:52
【问题描述】:
EF 核心包含您可能希望用于复杂查询的功能。例如AsNoTracking()、SumAsync、MaxAsync 或查找更改/修改的实体等在Microsoft.EntityFrameworkCore 程序集中可用
在clean architectureApplicationCore层不允许直接访问DBContext,数据只能通过通用存储接口和specifications访问
我理解关注点分离和从域层抽象持久层的想法。将来如果您更改数据库,您只需要更改持久层。 然而实际上,在企业级应用程序中,您多久更改一次数据库。一旦投入生产,就很难简单地更换它。
public class ToDoItemSearchService : IToDoItemSearchService
{
private readonly IRepository<Project> _repository;
public ToDoItemSearchService(IRepository<Project> repository)
{
_repository = repository;
}
public async Task<Result<List<ToDoItem>>> GetAllIncompleteItemsAsync(int projectId, string searchString)
{
var project = await _repository.GetBySpecAsync(projectSpec);
// how to load entities without tracking
}
}
如何访问 EF 功能?存储库应该公开这些吗?例如
public interface IRepository<TEntity>
{
List<TEntity> GetBySpecAsync>(...);
List<TEntity> GetBySpecAsyncWithNoTracking(...)
}
【问题讨论】:
-
这个问题最好在codereview.stackexchange.com接收
标签: c# asp.net-core asp.net-core-mvc clean-architecture ardalis-cleanarchitecture