c# - Entity Framework .include 性能问题

标签 c# .net entity-framework lazy-loading eager-loading

我有以下非常慢的查询。我是 Entity Framework 的新手,我相信它必须与 Eager Loading、Lazy Loading 或 Explicit Loading 相关。需要帮助优化以下 C# 语句。

var queryResult = CurrentSession.Set<SomeType_T>().Include(a => a.SomeType1_T)
                                .Include(a => a.SomeType1_T.Catalog_Type_T)
                                .Include(a => a.SomeType1_T.SomeType4_T)
                                .Include(a => a.SomeType1_T.SomeType2_T)
                                .Include("SomeType1_T.SomeType2_T.SomeType3_T")
                                .Include(a => a.SomeType1_T.SomeType4_T.SomeType5_T)
                                .Include(a => a.SomeType1_T.SomeType5_T)
                                .Include(a => a.SomeType1_T.Questions_T)
                                .Include(a => a.SomeType1_T.Questions_T.Question_Type_T)
                                .Include(a => a.SomeType1_T.Members_T)
                                .Include(b => b.SomeMasterType_T)
                                .Include(b => b.SomeMasterType_T.SomeMasterType1_T)
                                .Include(c => c.SomeType6_T)
                                .Include(d => d.SomeType7_T)
                                .Include(d => d.SomeType8_T)
                                .Include(d => d.SomeType8_T1)
                                .Where(t => t.SomeType9_T == _MatchThisKey);

最佳答案

您可以通过从数据库创建 2 个或更多小数据请求来提高许多包含的性能,如下所示。根据我的经验,您可以为每个查询提供最多 2 个包含。超过这个数量会带来非常糟糕的性能。是的,这是丑陋的。但它会带来非常好的性能提升。你也可以尝试感受一下:)

注意:这只是一个例子。

var userData = from u in db.Users
                        .Include(p=>p.UserSkills)
                        .Include(p=>p.UserIdeas)
                        .FirstOrDefault();

 userData = from u in db.Users
                    .Include(p=>p.UserFriends)
                    .Include(p=>p.UserFriends1)
                    .FirstOrDefault();

上面将使用多个遍历从数据库中获取小数据集。

关于c# - Entity Framework .include 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39095636/

相关文章:

c# - 当用户注册成功并将其重定向到登录页面时,如何显示消息框?

c# - C# 中的向量化运算符

c# - 使用不同的参数多次调用 BackgroundWorker.RunWorkerAsync()

c# - 如何在不执行 Queryable 的情况下以通用方式替换 Queryable<T> 中的列

c# - 如何查询子表值

linq查询匿名类型无法转换为POCO对象

c# - 添加所有抽象成员的非impemented stub 的简单方法

c# - 如何在 WPF 中为控件设置动画?

c# - 如何检查线程状态

.net - WPF Image.Source 缓存过于激进