改善使用实体框架时的搜索功能延迟

Posted

技术标签:

【中文标题】改善使用实体框架时的搜索功能延迟【英文标题】:Improve search functionality delay while using entity framework 【发布时间】:2018-06-05 12:53:52 【问题描述】:

如果我使用 AsQueryable 准备查询并在实体框架中动态附加搜索条件,与 SQL 查询相比,它需要很长时间。是否有任何替代方法可以在实体框架中创建动态查询?

谢谢 杰里米

【问题讨论】:

把SQL放到存储过程中用EF调用? AsQueryable() 也只是生成 SQL。阅读How to Ask,显示包含生成的SQL 的minimal reproducible example,并将执行计划与您手工制作的SQL 进行比较。 【参考方案1】:

写原始sql怎么样?这可能不是最好的选择,但它是一个替代方案.. 必须比较时间

你可以用这样的东西来完成这项工作。

        //an entity to return
        AltPedVendaModel ret = new AltPedVendaModel();

        var conn = DbContext.Database.GetDbConnection();
        try
        

            conn.Open();
            using (var command = conn.CreateCommand())
            
                string query = $"select * from .......";
                command.CommandText = query;
                DbDataReader reader = command.ExecuteReader();

                if (reader.HasRows)
                
                    while (reader.Read())
                    
                        //read line to line 
                        ret = new AltPedVendaModel
                        
                            IsOk = reader.GetBoolean(0),
                            Awb = reader.GetString(1),
                            Invoice = reader.GetString(2),
                            Po = reader.GetString(3),
                            Obs = reader.GetString(4),
                            Frete = reader.GetDecimal(5),
                        ;

                    
                
                reader.Dispose();
            


        
        catch (Exception ex)
        

        
        finally
        
            conn.Close();
        

        return ret;

【讨论】:

你也可以使用这个 cote 来运行存储过程。如果你的 SP 不返回行,请使用 command.ExecuteNonQuery() 而不是 command.ExecuteReader()。

以上是关于改善使用实体框架时的搜索功能延迟的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架将大量数据延迟加载到 GridView [关闭]

实体框架代码优先和搜索标准

延迟加载 - (实体框架)底层连接意外关闭

C# - 实体框架代码优先,延迟加载不起作用

实体框架 - 停止按需延迟加载相关实体?

使用实体框架更新数据库记录(延迟加载和虚拟属性)