DataContext의 래퍼 개체를 참조하는 정적 필드가 포함 된 정적 클래스가 있습니다.LINQ를 사용할 때 DataReader가 이미 열려 있습니다.
DataContext는 dbml 파일을 만들 때 Visual Studio에서 기본적으로 생성됩니다. &에는 DB에 저장되어있는 각 저장 프로 시저에 대한 메서드가 들어 있습니다.
우리 클래스에는 기본적으로 이러한 저장된 proc 메서드 각각을 실행하는 정적 메서드가 있습니다. &은 LINQ 쿼리를 기반으로 배열을 반환합니다.
예 :
public static TwoFieldBarData[] GetAgesReportData(string pct)
{
return DataContext
.BreakdownOfUsersByAge(Constants.USER_MEDICAL_PROFILE_KEY, pct)
.Select(x => new TwoFieldBarData(x.DisplayName, x.LeftValue, x.RightValue, x.TotalCount))
.ToArray();
}
모든 이제 다음, 우리는 다음과 같은 오류 얻을 :
There is already an open DataReader associated with this Command which must be closed firs
이 간헐적으로 일어나고을 내가 무슨 일이 일어나고 있는지에 대한 궁금 해요. 내 생각 엔 실행중인 메서드와 다음 메서드가 실행되는 사이에 지연이있을 때 DataContext를 잠그고 오류를 던지고있는 것입니다.
에있는 DataContext
LINQ 호출을 각각 래핑하여 해당 형식에 대한 배타성을 얻고 다른 요청이 대기열에 포함되도록 할 수 있습니까?
감사합니다. Bryan. 래퍼 클래스를 제거하고 정적 메서드에서 DataContext에 직접 액세스하는 것이 더 좋을까요? (DataContext에서 상속 한 래퍼에 정적 참조를 저장하는 대신)? –
아니요, 수명이 긴'DataContext' 문제는 여전히 남아 있습니다. 대신, 정적 API를 모두 제거하고 수명이 짧은 작업 단위에 대해서만'DataContext' 인스턴스를 생성해야합니다.나는 이것이 당신에게 불가능하거나 바람직하지 않을 수 있음을 알고 있습니다. 그러나,'DataContext'의 디자인은 당신의 사용 시나리오를 지원하지 않습니다. –