aspx ページにコントロールのリピーターがあります。各コントロールの DB に大規模なヒットがあるため、クエリをコントロールから親ページに移動しようとしています。問題は、次のエラーが発生することです。
Cannot access a disposed object.
Object name: 'DataContext accessed after Dispose.'.
.ToList() を実行するとクエリが強制的に実行されると思ったので、これを理解していません
親ページの私のコード
Private _activityList As IEnumerable(Of Activity)
Public ReadOnly Property ActivityList() As IEnumerable(Of Activity)
Get
Return _activityList
End Get
End Property
Sub PopulatePage()
Dim activityList = From a In dbContext.Activities Where a.PA.PA_Key.ToUpper().Trim() = "DCC" _
Select a
_activityList = activityList.AsEnumerable()
End Sub
私のコントロールのコードは次のとおりです。
Public _activityList As List(Of Activity)
Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
_activityList = CType(Me.Page, ParentPage).ActivityList.ToList()
End Sub
Sub grdSelectedActivities_NeedDataSource(ByVal source As Object, ByVal e As Telerik.WebControls.GridNeedDataSourceEventArgs) Handles grdSelectedActivities.NeedDataSource
Dim lnqActivities = _activityList
Dim objActivity As Activity = (From x In lnqActivities Where x.AC_Code = ActivityCode Select x).Single
Dim lnqRoundActivities = (From roundactivity In objActivity.RoundActivities Where roundactivity.RA_DS_Code = DepartmentalSettingsCode
Select roundactivity Order By roundactivity.RA_Name)
grdSelectedActivities.DataSource = lnqRoundActivities
End Sub
編集
grdSelectedActivities_NeedDataSource
コントロールメソッドで RoundActivities を取得しようとしているため、失敗していると思います。したがって、RoundActivityies 子オブジェクトを持つアクティビティ オブジェクトを送信する必要があります。
このオブジェクトを作成しようとしましたが、次のエラーが発生しました。
Explicit construction of entity type 'Activity' in query is not allowed.
enter code here
これは更新されたコードです:
Dim activityList = (From a In dbContext.Activities Where a.PA.PA_Key.ToUpper().Trim() = "DCC" Select New Activity With {.AC_Code = a.AC_Code, .RoundActivities = a.RoundActivities})
解決:
@kristoferAのアドバイスに従い、次のことを行いました
Dim loadOptions = New DataLoadOptions()
loadOptions.LoadWith(Of Activity)(Function(a As Activity) a.RoundActivities)
loadOptions.AssociateWith(Of Activity)(Function(a As Activity) a.RoundActivities.Where(Function(z) If(z.RA_DS_Code = departmentCode, False)))
dataContext.LoadOptions = loadOptions