По-перше, якщо ви починаєте новий проект, перейдіть з Entity Framework ("EF") - він тепер генерує набагато кращий SQL (більше схожий на Linq для SQL) і простіший у обслуговуванні та потужніший, ніж Linq у SQL (" L2S "). Що стосується випуску .NET 4.0, я вважаю Linq для SQL застарілою технологією. МС були дуже відкритими щодо подальшого розвитку L2S.
1) Продуктивність
На це складно відповісти. Для більшості одноосібних операцій ( CRUD ) ви знайдете приблизно однакову ефективність за всіма трьома технологіями. Ви повинні знати, як працюють EF та Linq до SQL, щоб використовувати їх якнайповніше. Для операцій з великим обсягом, таких як запити опитування, можливо, вам доведеться, щоб EF / L2S "компілював" ваш запит сутності таким чином, що рамці не доведеться постійно регенерувати SQL, або ви можете зіткнутися з проблемами масштабованості. (див. правки)
Для масових оновлень, де ви оновлюєте величезні обсяги даних, необроблений SQL або збережена процедура завжди буде краще, ніж рішення ORM, оскільки вам не доведеться переносити дані по протоколу до ORM для оновлення.
2) Швидкість розвитку
У більшості сценаріїв EF призведе до того, що роздути голі SQL / збережені програми, коли справа стосується швидкості розвитку. Дизайнер EF може оновлювати вашу модель з вашої бази даних по мірі її зміни (за запитом), тому ви не стикаєтеся з проблемами синхронізації між вашим об'єктним кодом та кодом бази даних. Єдиний раз, коли я б не розглядав можливість використання ORM, це коли ви робите додаток для звітування / інформаційної панелі, коли ви не здійснюєте жодних оновлень, або коли ви створюєте додаток для виконання операцій з обслуговування необроблених даних у базі даних.
3) акуратний / підтримуваний код
Руки вниз, EF б'є SQL / проростки. Оскільки ваші стосунки моделюються, приєднання до вашого коду відносно нечасті. Взаємовідносини сутностей майже зрозумілі читачеві для більшості запитів. Нічого не гірше, ніж перейти від налагодження ярусу до рівня або через декілька рівнів SQL / середнього рівня, щоб зрозуміти, що насправді відбувається з вашими даними. EF дуже потужно вводить вашу модель даних у свій код.
4) Гнучкість
Збережені програми та сирий SQL є більш "гнучкими". Ви можете використовувати проростки та SQL, щоб генерувати швидші запити для незвичайного конкретного випадку, і ви можете використовувати рідну функціональність БД простіше, ніж ви можете з ORM.
5) загалом
Не зациклюйтеся на помилковій дихотомії вибору ORM порівняно із збереженими процедурами. Ви можете використовувати обидва в одному додатку, і, мабуть, вам слід. Великі масові операції повинні входити в збережені процедури або SQL (який насправді може бути названий EF), а EF слід використовувати для ваших операцій CRUD та більшості потреб вашого середнього рівня. Можливо, ви хочете використовувати SQL для написання звітів. Я здогадуюсь, мораль історії така сама, як це було завжди. Скористайтеся правильним інструментом для роботи. Але худий його, EF зараз дуже хороший (станом на .NET 4.0). Витратьте в реальному часі читання та розуміння його в глибині, і ви можете легко створювати дивовижні, високопродуктивні програми.
EDIT : EF 5 трохи спрощує цю частину за допомогою автоматично складених запитів LINQ , але для реальних речей з високим обсягом вам обов’язково потрібно перевірити та проаналізувати, що найкраще підходить вам у реальному світі.