我正在寻找使用微风 EFContextProvider 实现存储库模式。在这个存储库中,我将公开一种使用 OData 过滤查询数据库的方法......就像微风默认的行为一样。我还想公开一个忽略 OData 过滤的方法,并返回一个元素列表,就好像它是默认的 EF 上下文一样。
所以,总而言之,我的想法是尝试做这样的事情:
public class RepositoryBaseEntity<T> : IRepository<T> where T : class
{
protected Breeze.WebApi.DataModelContainer _context;
public RepositoryBaseEntity(Breeze.WebApi.EFContextProvider<DataModelContainer> context)
{
_context = context;
}
/// <summary>
/// Gets all elements, ignoring OData filtering
/// </summary>
/// <returns>All elements, or null if none exists</returns>
public IEnumerable<T> GetAll()
{
// disable OData filtering in Breeze.WebApi.EFContextProvider
return _context.Context.Set<T>();
}
/// <summary>
/// Apply ODataFilters and get elements. Useful for Web API controllers
/// </summary>
/// <returns></returns>
public IEnumerable<T> ApplyODataFiltersAndGet()
{
// enable OData filtering in Breeze.WebApi.EFContextProvider
return _context.Context.Set<T>();
}
}
我一直在查看 Breeze EFContextProvider,似乎没有禁用 OData 过滤的方法。
当我不想要 OData 过滤时,我可能会使用普通的旧实体框架 DataModelContainer,当我想要 OData 过滤时使用 Breeze EFContextProvider 包装器......但是使用这种方法我将有两个 EF 上下文......和这是我想避免的事情......过去在其他一些项目中,我们在使用多个 EF 上下文时遇到了一些问题。
那么,你们看到有什么办法吗?谢谢!