彩票走势图

Linq to SQL Profiler使用注意事项——Select N+1

原创|使用教程|编辑:龚雪|2014-01-24 09:14:26.000|阅读 264 次

概述:Linq to SQL Profiler是由以色列著名公司Hibernating Rhinos开发出来的数据库工具。并且该软件是由 OR/M 社区的高层领导人亲自开发设计,能够精准的帮助优化App的冗余的代码。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

Select N+1是一种反模式的数据访问,对于数据库来说这是一种次优的访问方式。以下列代码为例,我们来讨论个中缘由。代码背景:我们需要向用户展示来自所有帖子的所有评论,以至于用户可以自行选择删除那些不合适的评论:

// SELECT * FROM Posts
var postsQuery = from post in blogDataContext.Posts
                 select post;

foreach (Post post in postsQuery)
{  
    //lazy loading of comments list causes:    
    // SELECT * FROM Comments where PostId = @p0   
    foreach (Comment comment in post.Comments)
    {      
        //print comment...   
    }
}

 在这个例子中,我们正在加载第一批选中的帖子列表。但是我们以非常缓慢的方式在访问采集,它导致了Linq to Sql每一次去访问数据库然后只带回一行的结果。这种效率是极其低下的,Linq to Sql Profiler在任何时候只要检测到有这种情况发生时,都会发出警告。

要解决这种问题比较轻松,强迫collection使用DataLoadOptions class来指定需要被加载的具体的对象模型:

var loadOptions = new DataLoadOptions();
loadOptions.LoadWith<Post>(p => p.Comments);
blogDataContext.LoadOptions = loadOptions;

// SELECT * FROM Posts JOIN Comments ...
var postsQuery = (from post in blogDataContext.Posts
                 select post);

foreach (Post post in postsQuery)
{  
    // no lazy loading of comments list causes    
    foreach (Comment comment in post.Comments)
    {      
        //print comment...   
    }
}

这样一来对于数据库来说就只有一个join和query了。

>>欢迎点此免费下载和试用Linq to SQL Profiler


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP