Я не уверен, External Source
- правильная формулировка, но по сути у меня есть представление в моей базе данных, которое указывает на таблицу в другой базе данных. Не всегда, но время от времени я получаю исключение ORA-12537 Network Session: End of File
. Я использую Entity Framework, поэтому я попытался разбить его, чтобы вместо одного массивного запроса он выполнял несколько запросов для генерации окончательного результата. Но это оказало неоднозначное влияние.
public List<SomeDataModel> GetDataFromList(List<string> SOME_LIST_OF_STRINGS)
{
var retData = new List<SomeDataModel>();
const int MAX_CHUNK_SIZE = 1000;
var totalPages = (int)Math.Ceiling((decimal)SOME_LIST_OF_STRINGS.Count / MAX_CHUNK_SIZE);
var pageList = new List<List<string>>();
for(var i = 0; i < totalPages; i++)
{
var chunkItems = SOME_LIST_OF_STRINGS.Skip(i * MAX_CHUNK_SIZE).Take(MAX_CHUNK_SIZE).ToList();
pageList.Add(chunkItems);
}
using (var context = new SOMEContext())
{
foreach(var pageChunk in pageList)
{
var result = (from r in context.SomeEntity
where SOME_LIST_OF_STRINGS.Contains(r.SomeString)
select r).ToList();
result.ForEach(x => retData.Add(mapper.Map<SomeDataModel>(x)));
}
}
return retData;
}
Я не уверен, есть ли другой подход к решению этого исключения или нет, или если разбиение запроса имеет какой-либо желаемый эффект. Вероятно, стоит отметить, что SOME_LIST_OF_STRINGS
довольно большой (в среднем около 21 000), поэтому totalPages
обычно занимает около 22.