Остановить LINQ to SQL от выполнения операторов выбора после вставки - PullRequest
6 голосов
/ 02 января 2009

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

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

Ответы [ 3 ]

6 голосов
/ 02 января 2009

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

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

Когда я вставляю с некоторым автоматически сгенерированным столбцом первичного ключа, я получаю этот 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 выдал мне исключение недопустимой операции: «Не удается выполнить операции создания, обновления или удаления над« Table (TableName) », поскольку у него нет первичного ключа».

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

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

INSERT INTO [dbo].[TableName]( fieldlist )
VALUES (@p0, @p1, @p2, @p3, @p4)
0 голосов
/ 22 июня 2011

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

0 голосов
/ 02 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...