EF 核心包含您可能希望用于复杂查询的功能。例如AsNoTracking()
,SumAsync
或MaxAsync
查找更改/修改的实体等在Microsoft.EntityFrameworkCore
程序集中可用
在干净的架构中,该ApplicationCore
层不允许直接访问 DBContext,并且只能通过公共存储库接口和规范访问数据
我理解关注点分离和从域层抽象持久层的想法。将来如果您更改数据库,您只需要更改持久层。然而实际上,在企业级应用程序中,您多久更改一次数据库。一旦投入生产,就很难简单地更换它。
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(...)
}