Следующий код вызывает ошибку «Этот запрос содержит ссылки на элементы, определенные в другом контексте данных». Мои 2 контекста данных создаются с использованием 2 вложенных блоков использования кода, который вызывает этот метод, и отображает его результаты на экране. Методы, которые этот метод вызывает, используют только используемый им контекст данных, они не создают никаких своих собственных. Я подтвердил, что они в порядке, вставив дополнительный оператор возврата прямо перед тем, как описано ниже, и у меня нет никаких проблем, что заставляет меня думать, что проблема заключается в инструкции LINQ на обратной линии ... Что я делаю неправильно?Другая ошибка DataContext. Почему это проблема?
public static IQueryable<tblSurveyor> GetPossibleSurveyorsForSurvey(SurveyDataContext surveyContext,
FINDataContext finContext, int surveyID)
{
IQueryable<tblSurveyor> currentSurveyors =
GetSurveyorsForSurvey(surveyContext, surveyID);
tblSurvey currentSurvey = GetSurvey(surveyContext, surveyID);
tblLocContact facility = GetFacility(finContext, currentSurvey.FacilityID);
IQueryable<tblSurvey> surveysInState = GetSurveysInState(surveyContext, finContext,
facility.State);
return from task in surveyContext.tblSurveyor_Tasks
from surveys in surveysInState
from cSurveyor in currentSurveyors
from surveyors in surveyContext.tblSurveyors
where surveyors.SurveyorID != cSurveyor.SurveyorID &&
surveys.SurveyID == task.SurveyID &&
task.SurveyorID == surveyors.SurveyorID
select surveyors;
}
Я изменил несколько вещей, и наиболее заметной я избавилась от IQueryable переменных и сделал их массивы. Это было как раз для того, чтобы заставить перечислить меня. Это показало, что проблема (или, по крайней мере, одна проблема в этом методе).
tblSurvey[] surveysInState = GetSurveysInState(surveyContext, finContext,
state).ToArray();
Вот реализация этого метода. Я все еще не вижу проблемы с этим.
public static IQueryable<tblSurvey> GetSurveysInState(SurveyDataContext surveyContext,
FINDataContext finContext, string state)
{
return from survey in surveyContext.tblSurveys
from facility in finContext.tblLocContacts
where survey.FacilityID == facility.LocationID && facility.State == state
select survey;
}
from surveys in surveysInState
происходит из SurveyDataContext и FINDataContext,from cSurveyor in currentSurveyors
происходит из SurveyDataContext. Однако оба используются один и тот же экземпляр surveyContext/finContext, и эти контексты являются живыми для полного доступа к этому вызову и когда данные записываются на экран. – jamoneЭй, вы не можете смешивать объекты контекста в своих запросах. Несмотря на то, что вы не получили ошибку, ошибка LINQ не возникает сразу; это происходит, когда вы пытаетесь запросить его, повторите его или вызовите метод LINQ (например, Count()). Таким образом, вы можете иметь запрос выше, возвращать результат в опросникInState и не генерировать ошибку при его запросе, но как только вы ее касаетесь, возникает исключение (потому что внутренняя коллекция не оценивается до тех пор, пока вы ее не коснетесь) , –