У меня очень странная проблема с запросом LINQ to Entities с EF1.
У меня есть метод с простым запросом:
public DateTime GetLastSuccessfulRun(string job)
{
var entities = GetEntities();
var query = from jr in entities.JOBRUNS
where jr.JOB_NAME == job && jr.JOB_INFO == "SUCCESS"
orderby jr.JOB_END descending
select jr.JOB_END;
var result = query.ToList().FirstOrDefault();
return result.HasValue ? result.Value : default(DateTime);
}
Метод GetEntities
возвращает экземпляр класса, производный от System.Data.Objects.ObjectContext
и автоматически созданный конструктором EF при импорте схемы базы данных.
Запрос работал нормально за последние 15 или 16 месяцев. И он все еще работает в нашей тестовой системе. Однако в действующей системе возникает странная проблема: в зависимости от значения параметра job
он возвращает правильные результаты или пустой набор результатов, хотя есть данные, которые он должен вернуть.
У кого-нибудь был такой странный случай? Есть идеи, в чем может быть проблема?
Дополнительная информация:
База данных, к которой мы запрашиваем, - это Oracle 10g, мы используем расширенную версию OracleEFProvider v0.2a .
Оператор SQl, возвращаемый ToTraceString
, прекрасно работает, когда выполняется непосредственно через SQL Developer, даже с тем же параметром, который вызывает проблему в запросе LINQ.
Следующее также возвращает правильный результат:
entities.JOBRUNS.ToList().Where(x => x.JOB_NAME == job && x.JOB_INFO == "SUCCESS").Count();
Разница здесь заключается в вызове ToList
на столе перед применением предложения where. Это означает две вещи:
- Данные в базе данных правильные.
- Кажется, что проблема заключается в запросе, включающем предложение where при выполнении провайдером EF.
Что меня действительно оглушает, так это то, что это живая система, и проблема возникла без каких-либо изменений в базе данных или программе. Один вызов этого метода вернул правильный результат, а следующий вызов через пять минут вернул неправильный результат. И с тех пор это только возвращает неправильные результаты.
Любые намеки, предложения, идеи и т. Д. Приветствуются, не говоря уже о том, насколько надуманными они кажутся! Пожалуйста, опубликуйте их как ответы, чтобы я мог голосовать за них, просто за то, что прочитал мой длинный вопрос и потрудился подумать об этой странной проблеме ...;