Witam,
załóżmy, że mam metodę seriwsu jak poniżej, która pobiera z bazy danych jakieś dane na podstawie dostarczonego identyfikatora.
public async Task<DataViewModel> GetData(int id)
{
DataViewModel model = null;
int? dataId = (await _db.MyTable.FirstOrDefaultAsync(x => x.id == id))?.id_data;
if(dataId != null)
{
//tutaj bardzo skomplikowane zapytanie do db z użyciem pobranego wcześniej dataId
//rezultat pakowany do model
}
return model;
}
oraz metodę kontrolera, która ogranicza się do tylko do zwrócenia do widoku wyniku otrzymanego z powyższej metody serwisu, coś a'la:
public async Task<ActionResult> GetForm(int id)
{
var model = await _serwis.GetData(id);
return View(model);
}
Moje pytania:
- Jest jakikolwiek sens używania FirstOrDefaultAsync() dla prostego i szybkiego zapytania, którego rezultat na dodatek jest wykorzystywany natychmiast linijkę niżej?
- Czy dobieranie się do pola id_data w sposób przedstawiony na listingu jest poprawny (chodzi mi o "opakowanie" await nawiasem).
- To "bardzo skomplikowane zapytanie" w if, powinno być asynchroniczne? Ostatecznie jak tylko się wykona natychmiast zostanie zwrócone więc - jeśli dobrze rozumiem ideę asynchroniczności - niczego nie ugram, bo niczego w "między czasie" i tak nie robię.
Z góry dziękuję za pomoc ;)