我在EntityManager
之上EntityRepository
的{{1}}架构EntityContext
。
例如:
上下文:
public class ContactsContext : DbContext
{
...
public DbSet<CompanyEntity> Companies { get; set; }
}
回购:
public class ContactsRepository
{
private readonly ContactsContextFactory m_contactsContextFactory;
...
public IEnumerable<CompanyEntity> GetCompanies()
{
using (ContactsContext context = m_contactsContextFactory.Create())
{
return context.Companies.ToList();
}
}
}
管理器:
public class ContactsManager
{
private readonly ContactsRepository m_contactsRepository;
...
public IEnumerable<CompanyEntity> GetCompanies(Predicate<CompanyEntity> p_predicate)
{
return m_contactsRepository.GetCompanies().Where(c => p_predicate(c));
}
}
我希望获得更高的性能,因此我想让Repo从Context中返回IQueryable
或者DbSet
,以便管理器可以过滤列表直接使用SQL而不是首先获取所有内容然后过滤。
DbSet
vs IQueryable
?DbSet
或IQueryable
,然后返回上下文的资源
因为我们还要去,所以无法释放(using
结束后)
查询数据库(在经理中) - 我是否正确?如果是的话,我该怎么办?
克服这个问题? - 实际上,它抛出了一个异常,即已经释放了上下文。