INSERT с Linq, пропуская некоторые "поддельные" столбцы - PullRequest
1 голос
/ 06 октября 2011

У меня есть таблица в базе данных со следующими столбцами: ID, Name, Txt.Мы используем Linq To Sql для реализации нашего DAL.Там другой коллега добавил два дополнительных столбца, поэтому в коде получается та же самая таблица: ID, Name, Txt, NameTemp, TxtTemp.

Эти две «поддельные» таблицы используются в разных частях кода в соединениях LINQ и анализа с помощью SQL Profiler.анализируемый SQL-запрос принимает «настоящие» столбцы и все работает правильно.Теперь мне нужно сделать INSERT, используя эту таблицу, но я получаю исключение, поскольку в выражении также используются ложные столбцы.

Поскольку я не могу добавить два поддельных столбца в БД (поскольку они не используютсятам), есть ли способ, которым я мог бы сделать вставку с Linq, пропуская эти два столбца?

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Я думаю, я знаю, куда ты клонишь. Вы должны иметь возможность добавлять свойства в частичный класс linq без проблем, единственное, что, если вы попытаетесь использовать запрос linq для этих «поддельных» столбцов, вы получите исключение, когда linqtosql попытается обратиться к столбцу, который не ' не существует в базе данных. Я прошел через это раньше - я хотел иметь возможность выбирать столбцы, которые не существуют в базе данных (но есть в классе linq2sql dbml), и чтобы linq2sql переводил столбцы в то, что они действительно есть в базе данных. Единственная проблема состоит в том, что нет действительно простого способа сделать это - вы можете добавить атрибуты к «поддельным» свойствам, чтобы linq2sql считал, что NameTmp и TxtTmp на самом деле являются Name и Txt в мире sql, единственная проблема заключается в том, что когда дело доходит до вставляя запись, переведенный sql дважды указывает один и тот же столбец (что не нравится SQL и выдает исключение).

Вы можете пометить столбец с помощью IsDbGenerated = true - это позволит вам вставлять записи, не сталкиваясь с проблемой двойного столбца, но вы не сможете обновить запись, если linqtosql не пожаловался на невозможность обновления вычисляемого столбца. Я думаю, вы можете использовать sproc, чтобы обойти это возможно?

Я недавно зарегистрировал ошибку в Microsoft, которую они никогда не исправят. Информация здесь может помочь вам получить то, что вам нужно -

http://social.msdn.microsoft.com/Forums/eu/linqtosql/thread/5691e0ad-ad67-47ea-ae2c-9432e4e4bd46

https://connect.microsoft.com/VisualStudio/feedback/details/526402/linq2sql-doesnt-like-it-when-you-wrap-column-properties-with-properties-in-an-interface

0 голосов
/ 06 октября 2011

LINQ предназначен не для вставки данных, а только для запросов - Language INtegrated Query .Используйте ADO.NET для вставки данных.

(оставляя первую часть, чтобы напомнить мою глупость) Отметьте ScottGu .Сгенерированные классы являются частичными (упоминается здесь ), так что вы можете поместить свои 2 свойства в редактируемую часть, и, поскольку у них не будет определен какой-либо атрибут отображения, они не будут отображены или сохранены.

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