Asp.net EntityDataSource执行查询两次

Asp.net EntityDataSource执行查询两次,asp.net,entitydatasource,Asp.net,Entitydatasource,我有一个将EntityDataSource中的数据绑定到分页ASP.NET ListView的页面。该查询实际上是一个相当复杂的查询,我不知道EDS是否真的是一个可行的方法,但它是继承的代码,我希望在不完全重新设计页面的情况下解决这个问题 问题是,当使用过滤器参数发回页面时,查询在不使用过滤器的情况下执行一次,然后再次使用过滤器执行一次。问题是,未过滤的结果集有1700多万条记录,并且会超时请求 所以我的问题是 为什么查询执行两次?我认为它可能与ListView上的DataPager有关,但当我

我有一个将EntityDataSource中的数据绑定到分页ASP.NET ListView的页面。该查询实际上是一个相当复杂的查询,我不知道EDS是否真的是一个可行的方法,但它是继承的代码,我希望在不完全重新设计页面的情况下解决这个问题

问题是,当使用过滤器参数发回页面时,查询在不使用过滤器的情况下执行一次,然后再次使用过滤器执行一次。问题是,未过滤的结果集有1700多万条记录,并且会超时请求

所以我的问题是

  • 为什么查询执行两次?我认为它可能与ListView上的DataPager有关,但当我从页面中删除它时,它没有改变任何东西

  • 更新:2013/04/16

    谢谢你@bUKaneer和@Lhibodeaux。我认为将请求信息添加到OP中会有所帮助

    正如建议的那样,我注释掉了寻呼机控件和列表视图。删除后,对数据库的所有请求都停止。我只添加了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>
    

    在注释了除ListView的数据源分配给EDS的位置之外的所有内容后,我无法解决此问题


    我将通过剥离EDS并用对存储过程的调用替换它来解决这个问题。非常令人沮丧,虽然这个问题存在于大约10-15个屏幕上,没有其他选择,我将不得不从头开始重新编写每个屏幕

    EDS是否还有其他约束条件?如果您注释掉ListView,DataPager和EDS是否还有其他问题?如果没有看到更多的代码本身,就很难确定这里到底发生了什么。数据源上有哪些事件处理程序?数据寻呼机实际上是列表视图布局模板的一部分吗?如果是在外部,是否正确设置了PagedControlID值?过滤器参数是在EntityDataSource的参数集合的回发部分设置的,还是在代码隐藏中发生了什么,然后强制重新绑定?
    <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>
    
    protected void Page_PreRender(object sender, EventArgs e)
    {
        if (!kqpFilters.IsFiltered && !IsPostBack)
        {
            lvSerialNumbers.DataSourceID = null;            
        }
        else
        {
            lvSerialNumbers.DataSourceID = "edsSerialNumbers";
        }
    }