У меня относительно простой запрос, который возвращает противоречивые результаты.
Имея коллекцию идентификаторов (около 3300), я хочу запросить объекты, у которых есть дочерний элемент с этим идентификатором.Отношения между моими типами от 1 до n.Я делаю это партиями по 500 штук.
В моем тесте в анонимном типе в предложении Select у меня есть и ChildType
, и ChildTypeId
.Начиная с 5-го или 6-го пакета мой запрос возвращает неверные результаты.Пакеты запускаются последовательно.
Я использую .Net 4.6.1, EF6, DevArt 9.4.326 и Oracle 12c.
Я просто опубликую сводку моего кода.
Схема БД:
CREATE TABLE PARENT_TYPE
(
"FK_CHLID_TYPE_ID" NUMBER(38,0) NOT NULL
)
CREATE TABLE CHILD_TYPE
(
"ID" NUMBER(38,0) NOT NULL
)
Код C #:
public class ChildType
{
public long Id { get; set; }
}
public class ParentType
{
public ChildType ChildType { get; set; }
}
public void ProcessBatch(ISystemDataAccess dataAccess, long[] idsBatch)
{
var queryResult = dataAccess.GetQuery<ParentType>()
.Where(p => idsBatch.Contains(p.ChildType.Id))
.Select(p => new
{
ChildId = p.ChildType.Id,
Child = p.ChildType,
}).ToList();
if (queryResult.Any(qr => qr.ChildId != qr.Child.Id))
{
Debugger.Launch(); // will run in the 5th or 6th batch
}
}
Во время 5-го или 6-го пакета будет запущен отладчик.
Некоторые замечания: Данные в БД являются согласованными и не приводят к неверным результатам.Ошибочные результаты находятся в свойстве Child анонимного типа и различаются для разных прогонов.ChildId
в анонимном типе всегда как ожидалось.Если я использую определенный тип в предложении Select, проблема все равно возникает.
Кто-нибудь испытывал нечто подобное?Это вызвано EF или DevArt в сочетании с contains ()?Решением будет использование только идентификатора, но я хотел бы знать, что является причиной проблемы.