Linq по хранимым процедурам

Я предполагаю, что вы используете flexbox, чтобы контейнер расширялся по ширине, чтобы содержать как можно больше элементов по горизонтали; в этом случае flex-direction:column не будет работать. Вы можете проверить https://www.w3schools.com/css/css3_multiple_columns.asp

Поддержка скудна, но это единственное, что может делать то, что вы хотите (вот почему необходимо ввести): https://caniuse.com/#search=column

6
задан Andrew Hare 7 April 2009 в 18:06
поделиться

7 ответов

LINQ является замечательным дополнением к.Net Framework, он действительно, однако, имеет, это - ограничения. На данный момент LINQ еще не поддерживает весь синтаксис SQL (хотя я уверен, что они работают над ним). Кроме того, с LINQ нет никакого очевидного способа наличия, это обрабатывает несколько таблиц и дает нам только данные, в которых мы нуждаемся. С LINQ необходимо было бы получить все данные, затем сохранить то, что Вы хотите и выводите остальных, таким образом передавая больше данных, чем на самом деле необходимо, который является проблемой производительности.

Если все, что Вы делаете, является простой ВСТАВКОЙ, ОБНОВЛЕНИЕМ и Операторами удаления, LINQ является способом пойти (по-моему), и вся оптимизация сделана для Вас для более сложной работы, которую я сказал бы, чтобы придерживаться хранимых процедур.

5
ответ дан 8 December 2019 в 04:10
поделиться

Так как никто не добавил ДОВОД "ПРОТИВ" - я предложу тот здесь...

Сохраненные Procs предлагают Вам, способность отклонить выбирает/вставляет/удаляет/обновляет на Ваших базовых таблицах и представлениях, таким образом, у Вас мог быть потенциально сохраненный procs использования лучшей безопасности, как Вы могли с помощью Linq для SQL. Путем предоставления исполнительных разрешений только на procs, у Вас есть меньшая площадь поверхности для управления для безопасности.

Конечно - можно все еще использовать Linq для SQL и сохраненного procs вместе - возможно, который был бы более оптимальным вариантом.

10
ответ дан 8 December 2019 в 04:10
поделиться

Я предполагаю, что Вы значите LINQ для SQL как LINQ, и хранимые процедуры являются двумя совсем другими вещами.

Одна из главных причин использовать любой ORM состоит в том, чтобы увеличить скорость разработки. Каждый раз, когда у Вас есть компонент, который создаст запросы для Вас, который является тем меньше вещи, необходимо записать себя.

2
ответ дан 8 December 2019 в 04:10
поделиться

С моей точки зрения основное значение хранимых процедур было устранено с LINQToSQL. В течение долгого времени значение ключа использования хранимых процедур должно было инкапсулировать SQL в форме, где Вы будете естественно использовать параметризированные запросы. Это предоставило уровень безопасности разработчику относительно Внедрения SQL. Так как запросы LINQToSQL, по умолчанию, параметризованы, я нахожу, что мое использование хранимых процедур было уменьшено существенно.

Но это вовсе не значит то, что нет все еще места для них, но теперь я чувствую, что необходимо только использовать их, когда они обеспечивают значительное значение по параметризованному запросу LINQ с точки зрения меньшей сложности или увеличенной производительности, возможно, из-за способности сервера оптимизировать для процедуры. Удаляя по зависимости от хранимых процедур, я чувствую, результаты в более удобной в сопровождении кодовой базе, поскольку большая часть кода расположена в Вашем IDE вместо того, чтобы быть разделенной между Вашей базой данных и Вашим IDE.

Обратите внимание, что можно все еще использовать хранимые процедуры с LINQToSQL. Я просто не нахожу много значения при этом. На самом деле я не могу думать о единственной хранимой процедуре, которую я записал начиная с переключения на LINQToSQL, хотя я записал несколько табличных функций для выполнения определенных поисков. Они отбрасываются на мой DataContext, и появитесь как методы, которые я могу вызвать для получения соответствующих объектов от DB с помощью функции.

4
ответ дан 8 December 2019 в 04:10
поделиться

Я говорил об этом с кем-то здесь на днях, поскольку мы используем хранимые процедуры для всего доступа к базе данных в настоящее время. Мы обсуждали LINQ в целом и LINQ к реализации SQL, IQueryable и т.д. Она быстро поняла, что использование LINQ с sprocs будет избыточным в лучшем случае и трудным в худшем случае.

Преимущества LINQ к SQL состоят в том, что код живет в одном месте, и что происходит в DB, очень ясно. Кроме того, время разработки может быть меньше, завися главным образом от процесса, поскольку существует тот меньше продукта работы для создания.

Преимущества Sprocs, поскольку я вижу его, являются также двукратными. Хранимые процедуры допускают намного лучшее управление доступом для DBA, поскольку они могут осмотреть sproc перед развертыванием, и предоставлять доступ использования приложения только для выполнения этого sproc, а не доступ для чтения-записи ко всем требуемым таблицам. Это делает для намного лучших обзоров конкуренции базы данных и проблем производительности. Другое преимущество, которое я вижу, состоит в том, что, в то время как LINQ к SQL генерирует корректный запрос, в случае сложных запросов, существуют времена, где Вы поражаете случай, который вызывает плохую оптимизацию на конце DB. В тех случаях Вы или переписали бы запрос или предоставили бы подсказки оптимизатору, оба - трудная/невозможная/метафора разрыв с LINQ.

Возможно, это - DBA во мне (не DBA, но были), но я действительно нервничаю, когда работа над большой высокой транзакцией загружает DB и не знающий точно каждый возможный оператор, который был бы выполнен системой. Таким образом, я придерживаюсь sprocs сам.

1
ответ дан 8 December 2019 в 04:10
поделиться

Я широко использую LINQ-to-SQL в своих проектах и ​​обнаружил, что он работает так же хорошо, как и SP почти во всех случаях.

В некоторых случаях вы теряете производительность / возможность использования LINQ-to-SQL, без сомнения:

  • Поскольку запросы заключаются в код с использованием LINQ, вы не можете использовать встроенный в SQL оптимизатор запросов / инструмент оптимизатора индекса (так же легко). Такие вещи, как отслеживание планов выполнения, также требуют дополнительного шага (получение сгенерированного sql). Думаю, довольно тривиально.

  • Если у вас действительно низкая пропускная способность, отправка дополнительного текста параметризованного запроса по сети займет больше полосы пропускания, чем просто отправка вызова хранимой процедуры. Итак, если вы пишете приложение для Windows, которое обменивается данными через модемное соединение, это может быть более серьезной проблемой, чем веб-приложение (где серверы расположены рядом друг с другом) или если вы находитесь в ситуации действительно высокой загрузки.

0
ответ дан 8 December 2019 в 04:10
поделиться

Есть несколько вещей, которые я хотел бы добавить в обсуждение:

  • Linq менее вероятно попадает в кэшированный план выполнения в SQL Server, чем хранимая процедура. В то время как компиляция основных операторов select легка, в более сложных запросах компиляция может быть достаточно дорогой. (При многих факторах это утверждение является верным/не верным для вашей ситуации, но это, вероятно, для другой записи)

  • Если вы перекомпилировали данные с перекосом, это может на самом деле быть преимуществом, предотвращающим нечетные решения по использованию индексов в SQL. Подумайте выберите * FROM Person where LastName = @Letter First pass where @Letter='Z' (скажем, 0.25% от общего числа людей) против @Letter='S' (6.00% от общего числа людей) может привести к дико разным планам выполнения.

  • Linq эффективно восстанавливает специальный sql в нашем коде. Предоставлено это через слой абстракции и на новом языке, но я больше не вызываю exec GetOrders @DateStart=@now @DayRange=7, а пишу имя моей таблицы, где пункт, и порядок по.

  • Отслеживание невыполненных SQL выражений обратно в код, который генерировал выражения более дифкульктно, чем с ПС. В среде с большим объемом данных SQL-профилировщик часто запускается на регулярной основе для поиска невыполнимых запросов (большой процессор, количество чтений или длительность). Так как Linq абстрагирует генерируемый им текст, становится сложно отследить sql обратно в определенное место в коде, особенно в больших приложениях.

  • В качестве примечания, при необходимости Linq может вызывать определенную хранимую процедуру, а не генерировать свой собственный SQL. См. эту статью Scott Gu .

3
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: