加速LinqDataSource
问候,我有一个以下问题。假设其中有两个表中的数据库:加速LinqDataSource
Clients( id,
name,
address)
Orders(
id,
name,
desc,
datemodified,
client_id)
第二个引用的第一个,即每个订单分配给客户端。现在假设我有一个.aspx页面与的LinqDataSource的订单表,使用该数据源,并显示一个表有以下几列一个GridView:
- 订单名称。
- 订单描述
- 客户名称。
- 客户地址。
据我所知,Linq to SQL的设计方式是,默认情况下它不会加载任何关联的实体,只有在请求子属性时才会这样做。因此,加载页面时,会发生以下情况:
- 第一个查询将从订单表中检索记录。
- 对于由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