Всем здравствуйте, стоит ли использовать навигационные свойства для добавления связанных данных в БД, или можно это сделать другим способом? Читал, что каждое обращение к навигационному свойству генерирует новый запрос к БД.
Использовать стоит однозначно, но благоразумно. Все сильно зависит от задачи но:
- если связанные данные точно понадобятся то можно загрузить одним запросом (см. .Include(...));
- при ленивой загрузке запрос будет _только_ при обращении к свойству, но если не воспользовались include то это в любом случае запрос;
- вероятно речь о code first, не забываем про индексы (fluent api)
- если все стало плохо то всегда можно воспользоваться видами (в том числе материализованными) или прямыми запросами
Хорошо, а если я вызову хранимую процедуру, напрямую SqlQuery(), она должна вставить данные в две связанные таблицы и вернуть число, это нормальный подход? Я так делал на вин формах но на ADO.NET и там это как разумеющееся вроде как. А чем тут дышит народ я пока не знаю ,потому что не так давно начал этим в серьезную заниматься (2 месяца как)
Поясните пожалуйста, студенту выпускнику.
Михаил: Можно сказать, что EF нужен для REST api или для CRUD, для остального использование хранимых процедур или даже прямых запросов для обновления/удаления/вставки значительного количества данных считаю приемлемым. EF до сих пор не умеет массово обновлять или удалять, а попытка загрузить нужные данные в контекст, их обновление и сохранение это гарантированные тормоза.