加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – EF4中的数据加载策略/语法

发布时间:2020-12-15 21:20:24 所属栏目:百科 来源:网络整理
导读:长时间潜伏,第一次发布,并新学习EF4和MVC3. 我需要帮助确保在这种情况下我使用正确的数据加载策略以及一些帮助最终确定查询的一些细节.我目前正在使用here概述的急切加载方法来处理某个“仪表板”视图,该视图需要来自大约10个表的少量数据(都具有FK关系). va
长时间潜伏,第一次发布,并新学习EF4和MVC3.

我需要帮助确保在这种情况下我使用正确的数据加载策略以及一些帮助最终确定查询的一些细节.我目前正在使用here概述的急切加载方法来处理某个“仪表板”视图,该视图需要来自大约10个表的少量数据(都具有FK关系).

var query = from l in db.Leagues
                 .Include("Sport")
                 .Include("LeagueContacts")
                 .Include("LeagueContacts.User")
                 .Include("LeagueContacts.User.UserContactDatas")
                 .Include("LeagueEvents")
                 .Include("LeagueEvents.Event")
                 .Include("Seasons")
                 .Include("Seasons.Divisions")
                 .Include("Seasons.Divisions.Teams")
                 .Where(l => l.URLPart.Equals(leagueName))
                         select (l);

            model = (Models.League) query.First();

但是,我需要对我无法解决的数据进行一些额外的过滤,排序和整形.从这一点来看,这是我的主要需求/关注点:

>几个子对象仍然需要额外的过滤,但我还没有能够找出语法或最佳方法.示例:“TOP 3 LeagueEvents.Event WHERE StartDate> = getdate()ORDER BY LeagueEvents.Event.StartDate”
>我需要对一些字段进行排序.示例:ORDERBY Seasons.StartDate,LeagueEvents.Event.StartDate和LeagueContacts.User.SortOrder等.
>我已经非常关注这个查询生成的SQL的总体大小和连接数,并且我认为我可能需要一个不同的数据加载方法.(显式加载?多个QueryObjects?POCO?)

关于如何解决这些剩余需求以及确保最佳性能的任何意见,指导或建议都非常感谢.

解决方法

您对查询大小和 size of the result set are tangible的关注.

正如@BrokenGlass所提到的,EF不允许您对包含进行过滤或排序.如果要订购或过滤关系,则必须将投影用于匿名类型或自定义(非映射)类型:

var query = db.Leagues
                      .Where(l => l.URLPart.Equals(leagueName))
                      .Select(l => new 
                          {
                              League = l,Events = l.LeagueEvents.Where(...)
                                                     .OrderBy(...)
                                                     .Take(3)
                                                     .Select(e => e.Event)
                              ... 
                          });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读