Как изменить атрибут UpdateCheck столбца SQL LINQ 2 во время выполнения? - PullRequest
0 голосов
/ 05 ноября 2008

У нас есть несколько приложений, которые используют один и тот же Linq 2 SQL DataContext. Одно из этих приложений будет делать массивные вставки (это конвертер из старой системы). Можно ли изменить UpdateCheck столбца TimeStamp каждой таблицы во время выполнения? Только для этого одного приложения мы хотели бы установить его на Никогда, во всех других приложениях должно быть всегда.

Ответы [ 4 ]

1 голос
/ 05 ноября 2008

AFAIK вы не можете изменить его (по крайней мере, простыми средствами) во время выполнения, потому что он автоматически генерируется как атрибут в свойствах классов домена. Э.Г.

[Column(Name="ITM_CREATE_DATE", Storage="_ITM_CREATE_DATE", DbType="DateTime NOT NULL", UpdateCheck=UpdateCheck.Never)]
public System.DateTime CreationDate

Возможный обходной путь (который я никогда не пробовал, поэтому я не знаю, работает ли он) состоит в том, чтобы скопировать код <DataContext>.designer.cs в ваш отдельный проект, внести изменения в копию и использовать его без дизайнера.

0 голосов
/ 26 марта 2009

Существует несколько свойств атрибута [Column], которые запускают этот SELECT после INSERT:

  • Автосинхронизация, которая по умолчанию никогда не используется и отменяется ISDBGenerated и ISDBVersion
  • ISDBGenerated, который генерирует поведение, которое вы описываете.
  • IsVersion, что означает, что поле будет автоматически обновляться при каждом обновлении / вставке записи, а LINQ также будет извлекать фактическое значение после обновления / вставки, что приведет к описанному вами поведению.

Я не уверен, применимо ли это к вашей конкретной ситуации, но возможно ли удалить эти атрибуты из поля, которое вас беспокоит, и установить его вручную, вместо того, чтобы позволить БД устанавливать его самостоятельно? (или, по крайней мере, не говорите LINQ, что БД установит его автоматически, и LINQ не будет ВЫБРАТЬ после ВСТАВКИ).

Это не решает актуальную проблему исправления только для одного из 2 проектов. Я также не уверен, что работа LINQ выполняется во время выполнения через отражение или во время компиляции. Если магия совершается во время выполнения, вы можете сможете удалить атрибут с отражением и добавить его обратно, возможно , я действительно не знаю.

Отказ от ответственности: все, что я сказал, является теоретическим, я не проверял все это и не имел достаточного опыта работы с LINQ.
Просто мои 2 цента.

0 голосов
/ 06 ноября 2008

Дополнительная информация о том, что я пытаюсь сделать:

Я вижу такое поведение в профилировщике SQL Server:

exec sp_executesql N'INSERT INTO [dbo]. [Test] ([ID], [Data]) ЗНАЧЕНИЯ (@ p0, @ p1)

SELECT [t0]. [Timestamp] ОТ [dbo]. [Test] AS [t0] WHERE [t0]. [ID] = @ p2 ', N' @ p0 uniqueidentifier, @ p1 varchar (24), @ p2 uniqueidentifier ', @ p0 =' EF0F12B9-825E-48A2-943A-B43E94BB00AA ', @ p1 =' tadaaa 20081106 08:41:01 ', @ p2 =' EF0F12B9-825E-48A2-943A-B43E94BB00AA '

Я бы хотел запретить часть SELECT, так как это приложение выполняет только INSERTS, у меня есть ощущение, что при вставке более 100 000 записей, подавление части SELECT [to]. [Timestamp] может принести мне большую производительность. ..

0 голосов
/ 05 ноября 2008

UpdateCheck не используется для операций вставки, только для обновления.

...