LINQ to SQL - Как хранимые процедуры взаимодействуют с неподтвержденными изменениями текста данных? - PullRequest
1 голос
/ 06 августа 2010

Кто-то здесь спросил:

"Linq-To-Sql позволяет вызывать SP. Если этот SP выполняет обновление / удаление / вставку, нужно ли после него SubmitChanges ()?"

И ответ был:

«Нет, вы не делаете. Код будет работать. Отправка изменений касается только измененных объектов LINQ to SQL, а не сохраненных процедур.»

Я бы простохотел бы уточнить:

(извините, я относительно новичок в LINQ)

Да, но не будет ли хранимая процедура обойти объект datacontext и изменить саму базу данных?(в то время как linq изменяет только объект datacontext, пока не будет вызван метод datacontext.submitchanges, где он затем изменяет базу данных)

Могу ли я, чтобы хранимая процедура модифицировала мой объект datacontext каким-либо образом?Это уже делает это?

Можно ли сделать так, чтобы

  • , если я вызываю SP с linq (и я предполагаю, что он напрямую изменяет базу данных),
  • затем используйте linq для изменения моего объекта datacontext и отправьте изменения, которые я сделал, в мой объект datacontext,

два разных изменения, которые я сделал (одно с SP, другое с Linq длямой текстовый текст не будет мешать?

Что я действительно хочу, так это чтобы мои хранимые процедуры изменили мой текстовый текст.Возможно ли это?

Я должен упомянуть, что я конвертирую веб-сайт из SQL в LINQ, который в основном содержит хранимые процедуры, и пытаюсь выбрать мои битвы, с какими хранимыми процедурами конвертировать в LINQ, а какие хранить в SQL ипросто звоните им по SP с помощью LINQ.

Спасибо за помощь, -Джефф

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

Если вы обновляете записи через сохраненный процесс, ваши загруженные (и отслеживаемые) объекты могут устареть.Если вы вызовите SubmitChanges с устаревшими объектами, вы получите исключения параллелизма.Вы можете обновить устаревший объект, используя метод Refresh в DataContext.

0 голосов
/ 06 августа 2010

FWIW, наш лакмусовый тест - это любой тривиальный PROC типа 'Crud', который вставляет / обновляет одну запись, может переместиться в ORM

Однако мы склонны оставлять более продвинутые процы (пакетные обновления илиочень чувствительные к производительности) «как есть».

Но да, вам нужно будет вызвать SubmitChanges () перед вызовом Proc, который зависит от состояния данных, измененных в DataContext

Возможно, не связаны, если вам нужно контролировать единицы работы, посмотрите, как разместить TransactionScopes вокруг вашего кода?

...