У меня есть простая модель просмотра, которая заполняется, но проблема в том, что веб-страница содержит множество списков выбора и для каждого списка выбора. Я вызываю процедуру базы данных для получения данных. список.Параллельные вызовы базы данных SQL Server из модели просмотра
Возможно ли, для выполнения, выполнять вызовы базы данных асинхронно или параллельно?
У меня есть такой код:
// controller
public ActionResult Index()
{
model = new SampleViewModel();
model.Populate(database);
return View(model);
}
// view model
public class SampleViewModel
{
public SampleViewModel(DbContext db)
{
_list1 = context.Db.SqlQuery<SelectList1>("SELECT Id, Value FROM dbo.Table1").ToList();
_list2 = context.Db.SqlQuery<SelectList2>("SELECT Id, Value FROM dbo.Table2").ToList();
_list3 = context.Db.SqlQuery<SelectList3>("SELECT Id, Value FROM dbo.Table3").ToList();
_list4 = context.Db.SqlQuery<SelectList4>("SELECT Id, Value FROM dbo.Table4").ToList();
_list5 = context.Db.SqlQuery<SelectList5>("SELECT Id, Value FROM dbo.Table5").ToList();
}
private readonly List<SelectList1> _list1;
public int SelectedList1Id { get; set; }
public IEnumerable<SelectListItem> List1 { get { return new SelectList(_list1, "Id", "Value");} }
-//- _list2
-//- _list3
-//- _list4
-//- _list5
}
Как вы можете видеть, _list3 ждет _list2 и _list2 ждет _list1 и это может медленный запросу много. Причина, по которой модель представления заполняется, заключается в том, что в реальном сценарии эти списки выбора связаны друг с другом, а модель содержит информацию о выбранных идентификаторах, и с этими идентификаторами я могу перестроить списки выбора, например, если проверка модели не удалась.
Любая идея? Могу ли я использовать какой-то подход асинхронного ожидания и поможет ли он мне в этом случае против SQL Server 2008?
(psst, это Model View Controller - это не «модель взгляда», это модель) – Will