У меня есть существующий проект, в котором я хочу использовать ObjectDataSource
для большого набора данных, который выводит результаты для DevExpress Grid.
Примеры кода показаны ниже.
У меня возникают проблемы с использованием контекста Entity Framework в статических методах, необходимых для ObjectDataSource.
Моя проблема в том, что я получаю это исключение:
System.ObjectDisposedException: экземпляр ObjectContext удален и больше не может использоваться для операций, требующих подключения.
Кто-нибудь знает, как я могу изменить приведенное ниже, чтобы поддерживать передачу экземпляра Entities
со страницы на статические методы?
Это пример ObjectDataSource
<dx:ASPxGridView ID="DefinedReportGrid" runat="server" EnableTheming="True" Theme="Office2010Blue" EnableViewState="False"
ClientInstanceName="DefinedReportGrid" DataSourceForceStandardPaging="True" DataSourceID="ReportDataSource">
<SettingsPager PageSize="30"></SettingsPager>
</dx:ASPxGridView>
<asp:ObjectDataSource ID="ReportDataSource" runat="server" EnablePaging="True"
StartRowIndexParameterName="startRecord" MaximumRowsParameterName="maxRecords" SelectCountMethod="GetPageCount" SelectMethod="GetData"
TypeName="ReportService">
</asp:ObjectDataSource>
Это мой класс обслуживания со статическими методами, которые затем могут использоваться ObjectDataSource
public class ReportService
{
[DataObjectMethod(DataObjectMethodType.Select, true)]
public static DataTable GetData(int startRecord, int maxRecords)
{
// Use EF DbContent and LINQ Query to fetch paged data, and return a DataTable
// The data is PIVOTED in the code before returning it as a DataTable
return outputTable;
}
public static List<int> GetWeeks()
{
// This also requires use of the EF DbContent
...
}
public static int GetPageCount()
{
// This also requires use of the EF DbContent
// Used to count the full data for applying the correct total Page Count
...
}
}
Это код для страницы веб-форм
public partial class DefinedReport : System.Web.UI.Page
{
private Entities _modelContext = ((Global)HttpContext.Current.ApplicationInstance).Entities;
protected void Page_Init(object sender, EventArgs e)
{
...
}
protected void Page_Load(object sender, EventArgs e)
{
...
}
}
Это глобальный код, в котором контекст сущностей устанавливается в начале и в конце запроса.
public class Global : HttpApplication
{
public Entities Entities { get; set; }
...
private void Application_BeginRequest(object sender, EventArgs e)
{
Entities = new Entities();
}
private void Application_EndRequest(object sender, EventArgs e)
{
if (Entities != null)
{
Entities.Dispose();
}
}
}