C# 用ORM替换EntityFramework查询以获得性能-需要支持iqueryable

C# 用ORM替换EntityFramework查询以获得性能-需要支持iqueryable,c#,asp.net-web-api,entity-framework-6,dapper,iqueryable,C#,Asp.net Web Api,Entity Framework 6,Dapper,Iqueryable,我们在应用程序中有一些仪表盘,它有100000条记录,当然我们有分页功能——但是EF的性能非常差,所有这些用于批量检索的Get查询都非常慢 我正在寻找一些选项来用Dapper或ORMLite类型的微型ORM替换这些查询,但不幸的是,它们不支持iqueryable,这是我们的仪表板/网格必须具备的,因为我们有很多事情要做,比如过滤搜索排序等 我想提出的问题是,有没有人遇到过类似的情况?你选择了哪条路 首先,确保在EF查询中禁用跟踪(AsNoTracking()),这应该会给您带来第一次提升 然后,

我们在应用程序中有一些仪表盘,它有100000条记录,当然我们有分页功能——但是EF的性能非常差,所有这些用于批量检索的Get查询都非常慢

我正在寻找一些选项来用Dapper或ORMLite类型的微型ORM替换这些查询,但不幸的是,它们不支持iqueryable,这是我们的仪表板/网格必须具备的,因为我们有很多事情要做,比如过滤搜索排序等


我想提出的问题是,有没有人遇到过类似的情况?你选择了哪条路

首先,确保在EF查询中禁用跟踪(
AsNoTracking()
),这应该会给您带来第一次提升

然后,调整数据库、重新索引、移动到更快的机器等

如果事情仍然太慢,考虑一下旧的好的LIQ2SQL,它在实现上更快。


如果仍然不满意,请忘记
IQueryable
,使用参数化视图/存储过程,并使用Dapper调用服务器并提供所有必要的参数。

首先,确保在EF查询中禁用跟踪(
AsNoTracking()
),这应该会给您带来第一次提升

然后,调整数据库、重新索引、移动到更快的机器等

如果事情仍然太慢,考虑一下旧的好的LIQ2SQL,它在实现上更快。


如果仍然不满意,请忘记
IQueryable
,使用参数化视图/存储过程,并使用Dapper调用服务器并提供所有必要的参数。

您可以排除Dapper-它不支持
IQueryable
;你看过像LLBLGenPo这样的工具吗?你试过EF的最新版本吗?是的,我们正在使用EF 6.0+-我还没有研究LLBLGenPo,让我来研究一下!你能给我们举一个慢LINQ查询的例子吗?大多数情况下,如果您仍然需要IQueryable支持,用另一个工具替换EF将不会改善任何事情。只有10000条记录的仪表盘算不上什么,即使是几百万条记录也不算多,那么问题真的是由实体框架引起的吗?有很多选项和第三方库可以提高性能,如查询缓存、包含优化、包含筛选等。我认为,在考虑切换到另一个支持“IQueryable”的ORM之前,第一步是确保EF不能正确完成任务。您可以排除dapper-它不支持
IQueryable
;你看过像LLBLGenPo这样的工具吗?你试过EF的最新版本吗?是的,我们正在使用EF 6.0+-我还没有研究LLBLGenPo,让我来研究一下!你能给我们举一个慢LINQ查询的例子吗?大多数情况下,如果您仍然需要IQueryable支持,用另一个工具替换EF将不会改善任何事情。只有10000条记录的仪表盘算不上什么,即使是几百万条记录也不算多,那么问题真的是由实体框架引起的吗?有很多选项和第三方库可以提高性能,如查询缓存、包含优化、包含筛选等。我认为在考虑切换到另一个支持“IQueryable”的ORM之前,第一步是确保EF不能正确完成任务。是的,我尝试的第一件事是在仪表板查询上应用AsNoTracking()。系统的其他部分需要进行跟踪,因为我们使用EF context change(changeTracker)来跟踪更改的实体,以便进行审计,然而,对于大多数仪表盘仅用于查看的情况,我们不需要跟踪-经过所有努力,结论是我们需要为繁重的检索操作摆脱EF是的,我尝试的第一件事是在仪表板查询上应用AsNoTracking()。系统的其他部分需要进行跟踪,因为我们使用EF context change(changeTracker)来跟踪更改的实体,以便进行审计,然而,对于大多数仪表盘仅用于查看的情况,我们不需要跟踪-经过所有努力,结论是我们需要为繁重的检索操作摆脱EF