Если весь мой доступ к базе данных sql server осуществляется через хранимые процедуры, и я планирую продолжить эту практику, будет ли использование linq2sql и / или entity framework для будущих проектов ненужным уровнем сложности, который не добавляет большой ценности?
Связанный вопрос: пытается ли Microsoft увести разработчиков от использования хранимых процедур для доступа к данным?





Нет. LINQ2SQL добавляет большую ценность с точки зрения возможности легко сопоставлять сущности базы данных с классами в коде и легко работать с этими классами с помощью встроенных языковых конструкций. Вы можете легко сопоставить операции CRUD сгенерированного класса сущности с вашими хранимыми процедурами, если хотите. Я обнаружил, что некоторые вещи больше не требуют, чтобы хранимые процедуры работали легко, и поэтому я отказался от их использования, но вы не обязаны это делать. По сути, LINQ2SQL может заменить большую часть, если не все, ваш DAL, избавляя вас от необходимости писать этот код.
LINQ-to-SQL поддерживает сопоставление множества операций (включая CRUD) с хранимыми процедурами, но вы теряете возможность компоновки, т.е. вы не можете просто добавить (exp).Where(x=>x.IsActive). Один из вариантов - это возвращающие табличное значение функции (UDF) вместо хранимых процедур, которые содержат данные запрос; это также представляет собой более жесткую метамодель (в отличие от SET FMT_ONLY ON, который является хитом и ошибкой).
Таким образом, ваши методы запроса могут быть составлены в базе данных; но обратите внимание, что Entity Framework поддерживает это нет, хотя LINQ-to-SQL поддерживает.
На самом деле, сейчас я в основном занимаюсь MVC, так что связанное управление в некотором роде спорный вопрос, но вы поняли ...
Я использую Linq2sql для вызова своих хранимых процедур просто потому, что он так быстро генерирует .net-код, который я могу вызвать из моего приложения, его просто перетаскивают, в основном это делается за секунды. Тем не менее, я думаю, вам нужно спросить себя, сколько времени вы тратите на обслуживание этих хранимых процедур. Если вы это сделаете, вы сэкономите много времени, используя linq2sql для вызовов crud. Я использую sprocs только при выполнении многоэтапных операций с базой данных.
Просто чтобы ответить на ваш связанный с этим вопрос: преимущества использования хранимых процедур не так заметны, как когда-то. Хотя я бы не стал говорить, что хранимые процедуры - зло, как некоторые говорили в прошлом (http://www.tonymarston.net/php-mysql/stored-procedures-are-evil.html - это очень хорошая статья), я бы сказал, что использование динамического sql, если это делается в четко определенный структурированный способ, в наши дни вполне приемлем.
Я не знаю, что Microsoft пытается увести разработчиков от использования хранимых процедур, но этот динамический sql следует рассматривать как приемлемый вариант.
Вы теряете возможность писать запросы Linq, что является лучшей частью linq-to-sql.
Я использую функции с табличным значением для таких вещей, как поиск или просмотр с фильтрацией. Передайте в функцию параметры фильтра, верните соответствующие элементы из таблицы. Перетащите таблицу в конструкторе, и я получу функцию, которую я могу использовать для замены источника данных для связанного элемента управления.