Остановить LINQ to SQL от выполнения операторов выбора после вставки

Я использую LINQ to SQL для обновления своей базы данных. Я вставляю много записей, и когда я вызываю SubmitChanges (), LINQ to SQL выполняет инструкции вставки и выбора для каждого объекта. Мне действительно не нужно обновлять свои объекты после того, как они будут вставлены в базу данных.

Знаете ли вы, что я могу запретить LINQ to SQL выдавать операторы выбора после операторов вставки? Это должно сделать мое приложение намного быстрее.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
3 059
3

Ответы 3

Я не могу вспомнить настройку сейчас, но в дизайнере в свойствах столбца у вас есть некоторые настройки «обновления».

Вы ищете ColumnAttribute.AutoSync. Если вы используете конструктор, проверьте каждый столбец на наличие свойства автосинхронизации и установите для него значение Никогда.

Редактировать: Хорошо, это не сработало для вас. Приготовьтесь к взлому карт!

Когда я вставляю с помощью некоторого автоматически сгенерированного столбца первичного ключа, я получаю этот SQL:

INSERT INTO [dbo].[TableName]( fieldlist )
VALUES (@p0, @p1, @p2, @p3, @p4)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]

Насколько я понимаю ваш запрос, вы не хотите, чтобы SELECT

Попытка 1: я перешел в поле первичного ключа и установил для автоматического создания значение false. Это вызвало исключение Sql «Невозможно вставить явное значение для столбца идентификаторов в таблицу« TableName », когда для IDENTITY_INSERT установлено значение OFF». Другими словами, linq указывает значение для этого столбца.

Попытка 2: я удалил автоматически сгенерированные столбцы из дизайнера. Это привело к тому, что Linq выдал мне исключение недопустимой операции: «Невозможно выполнить операции создания, обновления или удаления для таблицы (TableName), потому что у нее нет первичного ключа».

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

Эта третья попытка сгенерировала следующий SQL (это то, что вы просите)

INSERT INTO [dbo].[TableName]( fieldlist )
VALUES (@p0, @p1, @p2, @p3, @p4)

Спасибо за предложение. Я сделал это, но профилировщик по-прежнему показывает выбор после вставки и обновления. Не знаю почему.

Lance Fisher 06.01.2009 00:56

У меня есть два отмеченных столбца, для которых AutoGeneratedValue установлено значение true. Оператор select выбирает эти два столбца после вставок и обновлений, даже если AutoSync имеет значение false.

Lance Fisher 06.01.2009 01:18

Кажется, это нелепый объем работы, чтобы сделать что-то, что сработало бы правильно при первом использовании ADO.Net.

Jasmine 17.04.2009 22:53
then I marked another column as primary key - как это вообще возможно, поскольку этот столбец будет обновлен с помощью unique value с помощью запроса SQL, что, скорее всего, приведет к неверным данным.
ViRuSTriNiTy 31.03.2016 10:38

@ViRuSTriNiTy «первичный ключ» и «идентичность» - это разные понятия, и если вы вмешиваетесь в сопоставления ORM, это поможет узнать разницу между ними.

Amy B 31.03.2016 14:51

Я знаю разницу. Позвольте мне сказать иначе: как обеспечить наличие must be unique без явной установки уникального значения для столбца, который не предназначен для хранения этого уникального значения?

ViRuSTriNiTy 31.03.2016 14:54

@DavidB Спасибо, информация для отслеживания отсутствовала.

ViRuSTriNiTy 31.03.2016 15:13

@ViRuSTriNiTy Не обязательно быть уникальным в таблице. Он должен быть уникальным только с точки зрения экземпляра DataContext и только в том случае, если этот контекст отслеживает изменения объектов. Если вы вставляете по одной записи за раз, вы уже выиграли. Если вы иногда читаете записи, вы можете отключить отслеживание объектов в этих случаях. Если вы обновляете или удаляете, то это намного сложнее. (фиксированная грамматика)

Amy B 31.03.2016 15:57

Однажды у меня была эта проблема с проектом. Я просто использовал context.ExecuteCommand ({здесь строка sql.}). Это была одна вставка, которая вызвала проблемы с производительностью. На мой взгляд, это самое простое исправление, легкое наблюдение и обслуживание, а не копание в модели.

Другие вопросы по теме