EF является настолько широко используемым персоналом, но я не понимаю, как его использовать. Я встретил много проблем с ef в разных проектах с разными подходами. Поэтому некоторые вопросы собрались у меня в голове. И ответы заставляют меня использовать чистый ado.net с хранимыми процедурами. Итак, вопросы:
- Как работать с EF в n-уровневом приложении?
Например, у нас есть DAL с EF. Я видел много статей и проектов, которые использовали репозиторий, шаблоны unitofwork как своего рода абстракцию для EF. Я думаю, что такой подход убивает большинство преимуществ, которые увеличивают скорость развития и приводят к нескольким вещам:
- переназначение нагрузки EF приводит к некоторому DTO, который убивает производительность (вызовите некоторый выбор, чтобы получить данные таблицы - первый цикл, второй результат цикла - к некоторому составному типу, сгенерированному ef, next-filter сопоставленные данные с использованием linq и, наконец, сопоставьте его с некоторыми DTO). Точно переназначение в DTO является убийцей одного из самых больших преимуществ efs.
или - приводит к сильным связям между EF (и версией) и приложением. Это будет что-то вроде двухуровневого приложения с dal и презентацией с bll или dal с bll и презентацией. Думаю, это не лучшая практика. И тот же процесс загрузки, что и у предыдущей вещи, кроме картографирования, поэтому снова возникла проблема с производительностью. Мы могли бы попытаться использовать EF как DAL без какой-либо абстракции под ними. Но мы получим аналогичные проблемы каким-то другим способом.
- переназначение нагрузки EF приводит к некоторому DTO, который убивает производительность (вызовите некоторый выбор, чтобы получить данные таблицы - первый цикл, второй результат цикла - к некоторому составному типу, сгенерированному ef, next-filter сопоставленные данные с использованием linq и, наконец, сопоставьте его с некоторыми DTO). Точно переназначение в DTO является убийцей одного из самых больших преимуществ efs.
-
Должен ли я использовать один контекст для каждого приложения \thread\atomic? Использование подхода - один контекст для каждого приложения\поток может немного увеличить производительность и возможности для вызова свойств навигации, но мы сталкиваемся с другой проблемой - обновляем этот контекст и увеличиваем загруженные данные в контексте, также я не уверен в concurrency с одним dbcontext per приложение\нить. Использование контекста за операцию приведет к переназначению результатов в наши DTO. Итак, вы видите, что мы снова вернулись к вопросу №1.
-
Можем ли мы попытаться использовать только EF + SP? Снова у нас есть вопросы из предыдущих вопросов. В чем причина использования ef, если большая часть функций не будет использоваться?
Итак, да, EF отлично подходит для запуска проекта. Это так удобно, когда у нас мало экранов и красных операций. Но что дальше?
Весь этот текст - это просто несортированные мысли. Я знаю, что чистый ado.net приведет к другим вызовам. Итак, что вы думаете об этой теме?