У меня есть несколько таблиц в базе данных MySQL для представления записей с датчика.Одной из особенностей системы, которую я разрабатываю, является отображение этих записей из базы данных веб-пользователю, поэтому я использовал ADO.NET Entity Data Model для создания ORM, использовал Linq to SQL для получения данных из базы данных,и сохранил их в созданной мною ViewModel, поэтому я могу отобразить его с помощью помощника по сетке MVCContrib:
public IQueryable<TrendSignalRecord> GetTrends()
{
var dataContext = new SmgerEntities();
var trendSignalRecords = from e in dataContext.TrendSignalRecords
select e;
return trendSignalRecords;
}
public IQueryable<TrendRecordViewModel> GetTrendsProjected()
{
var projectedTrendRecords = from t in GetTrends()
select new TrendRecordViewModel
{
TrendID = t.ID,
TrendName = t.TrendSignalSetting.Name,
GeneratingUnitID = t.TrendSignalSetting.TrendSetting.GeneratingUnit_ID,
//{...}
Unit = t.TrendSignalSetting.Unit
};
return projectedTrendRecords;
}
Я вызываю GetTrendsProjectedMethod, а затем использую Linq для SQL, чтобы выбрать только те записи, которые мне нужны.В моем сценарии разработки он работает нормально, но когда я тестирую его в реальном сценарии, где количество записей намного больше (около миллиона записей), он перестает работать.
Я положил несколько сообщений отладки, чтобы проверить его, и все работает нормально, но когда он достигает оператора return View()
, он просто останавливается, выдавая мне MySQLException: Timeout expired
.Это заставило меня задуматься, получаются ли данные, которые я отправил на страницу, самой страницей (она выполняет поиск отображаемых элементов в базе данных только тогда, когда это нужно самой странице, или что-то в этом роде).
Всемои другие страницы используют тот же набор инструментов: MVCContrib Grid Helper, ADO.NET, Linq to SQL, MySQL и все остальное работает нормально.