我有一个页面,它将EntityDataSource中的数据绑定到分页的ASP.NET ListView。查询实际上是一个相当复杂的查询,我不知道EDS真的是要走的路,但它是继承的代码,我希望解决这个问题,而不必完全重新设计页面。
问题是,当页面回发时,使用过滤器参数,查询将在没有过滤器的情况下执行一次,然后再次使用过滤器执行。问题是未经过滤的结果集是1700多万条记录并且是请求的时间。
所以我的问题是......
更新:2013/04/16
谢谢@bUKaneer和@lthibodeaux。我认为将请求信息添加到OP会很有帮助。
根据建议,我注释掉了Pager控件和列表视图。删除后,所有对数据库的请求都会停止。我只添加了ListView,并且查询再次执行了两次。
没有为EDS本身分配额外的事件处理程序。
<asp:EntityDataSource ID="edsSerialNumbers" runat="server" ContextTypeName="DBName.Entities" EnableFlattening="False"
EntitySetName="DIST_TABLE" Include="PRODUCT, DISTRIBUTION, DISTRIBUTION.COMPANY_SITE"
EnableUpdate ="true" EnableViewState="true"
OrderBy="it.DISTRIBUTION.DIST_NAME, it.PRODUCT.SERIAL_NUMBER"></asp:EntityDataSource>
DataPager实际上嵌入在ListView之外的单独UserControl中,并包含两次......
<div class="dataTablePager">
<kqp:TablePager ID="pgrTop" runat="server" PagedControlID="lvSerialNumbers"/>
</div>
<asp:ListView ID="lvSerialNumbers" runat="server" DataKeyNames="ID" OnDataBound="lvSerialNumbers_DataBound" OnItemEditing ="lvSerialNumbers_ItemEditing" onitemdatabound="lvSerialNumbers_ItemDataBound" EnableViewState="true">
...
</asp:ListView>
<div class="dataTablePager">
<kqp:TablePager ID="pgrBot" runat="server" PagedControlID="lvSerialNumbers"/>
</div>
EDS被触及的代码中唯一的位置是PreRender阶段...
protected void Page_PreRender(object sender, EventArgs e)
{
if (!kqpFilters.IsFiltered && !IsPostBack)
{
lvSerialNumbers.DataSourceID = null;
}
else
{
lvSerialNumbers.DataSourceID = "edsSerialNumbers";
}
}
答案 0 :(得分:0)
除了将ListView的数据源分配给EDS的地方评论一切外,我无法解决此问题。
我将通过撕掉EDS并将其替换为存储过程调用来解决它。非常令人沮丧的是,虽然这个问题存在于大约10-15个屏幕上而且没有替代方案,我将不得不从头开始重新编写每个屏幕。