Column.DbType, влияющий на поведение во время выполнения - PullRequest
2 голосов
/ 15 апреля 2009

Согласно документам MSDN свойство / атрибут DbType типа / элемента Столбец используется только для создания базы данных.

Тем не менее, сегодня, когда я пытался отправить данные в столбец IMAGE в базе данных SQLCE (не уверен, если только в CE), я получил исключение «Данные, усеченные до 8000 байт». Это произошло из-за того, что DbType все еще определяется как VARBINARY (MAX), который SQLCE не поддерживает. Изменение типа на IMAGE в DbType решает проблему.

Итак, какие еще сюрпризы хранятся в атрибутах Linq2SQL? Это ошибка или предназначена? Должен ли я сообщить об этом MS?

UPDATE

Получив ответ от Guffa, я протестировал его, но, похоже, для NVARCHAR (10) добавление строки длиной 11 символов вызывает исключение SQL, а не Linq2SQL.

The data was truncated while converting from one data type to another. 
     [ Name of function(if known) =  ]
A first chance exception of type 'System.Data.SqlServerCe.SqlCeException' 
     occurred in System.Data.SqlServerCe.dll

Ответы [ 2 ]

2 голосов
/ 15 апреля 2009

Тип DbType необходим только , если вы собираетесь создать таблицу, но это не значит, что в остальное время он игнорируется.

Если вы, например, определите столбец VarChar размером 100, вы получите исключение, если отправите строку длиной более 100 символов, даже если поле в базе данных действительно может вместить строку.

В документации сказано, что вы не должны указывать DbType, если он не нужен, так как тип данных выводится из значения, которое вы используете. Однако могут быть ситуации, когда вы не хотите использовать вывод DbType.

1 голос
/ 15 апреля 2009

Похоже, что статья MSDN может вводить в заблуждение ... однако LINQ-to-SQL, пока он еще жив, не получает огромное количество времени на разработку, поэтому я не буду задерживать дыхание в ожидании обновления .

Вы можете опубликовать сообщение о подключении или, возможно, добавить замечание на страницу MSDN (Содержимое сообщества).

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