加速LinqDataSource

问候,我有一个以下问题。假设其中有两个表中的数据库:加速LinqDataSource

Clients(

id,

name,

address)

Orders(

id,

name,

desc,

datemodified,

client_id)

第二个引用的第一个,即每个订单分配给客户端。现在假设我有一个.aspx页面与的LinqDataSource的订单表,使用该数据源,并显示一个表有以下几列一个GridView:

  1. 订单名称。
  2. 订单描述
  3. 客户名称。
  4. 客户地址。

据我所知,Linq to SQL的设计方式是,默认情况下它不会加载任何关联的实体,只有在请求子属性时才会这样做。因此,加载页面时,会发生以下情况:

  1. 第一个查询将从订单表中检索记录。
  2. 对于由GridView显示的每一行,当请求一个客户端属性时将执行额外的查询。

因此,如果我们有100个订单,这意味着将执行101个查询而不是1个(或者甚至可能201个,如果对每个客户端属性执行查询)?如何避免这种情况,并使LinqDataSource通过单个查询加载所有必填字段?

现在我看到了这个问题的唯一解决方法 - 使用一个带连接查询的SqlDataSource,它将一次检索所有必填字段。

回答:

这里设置LoadOptions在LinqDataSource.ContextCreated事件

看看如何做到这一点 http://codebetter.com/davidhayden/2007/08/06/linq-to-sql-query-tuning-for-performance-optimization/

回答:

您可以覆盖的LinqDataSource的OnSelecting事件有它检索匿名类型与准确的数据,你正在寻找:

protected void LinqDataSource_OnSelecting(object sender, LinqDataSourceSelectEventArgs e) 

{

DataContext dc = new DataContext();

var query = from o in dc.Orders

select new

{

OrderName = o.name,

OrderDesc = o.desc,

ClientName = o.Client.name,

ClientAddress = o.Client.address

};

// Insert any necessary conditional statements adjustments as needed.

e.Result = query;

}

查询就会发送到数据库会抢只有这四个领域,并使用内部联接来完成,因此您只能为每行检索一次数据。

以上是 加速LinqDataSource 的全部内容, 来源链接: utcz.com/qa/259758.html

回到顶部