Column.DbType影响运行时行为

时间:2009-04-15 12:10:55

标签: .net linq-to-sql

根据MSDN docs,Column类型/元素的DbType属性/属性仅用于创建数据库。

然而,今天,当尝试将数据提交到SQLCE数据库上的IMAGE列时(不确定是否只在CE上),我得到了'数据被截断为8000字节'的例外。这是因为DbType仍被定义为SQLCE不支持的VARBINARY(MAX)。在DbType中将类型更改为IMAGE可以解决问题。

那么Linq2SQL属性还存在哪些其他惊喜?这是一个错误还是打算?我应该向MS报告吗?

更新

从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 个答案:

答案 0 :(得分:2)

如果您要创建一个表,DbType只是 required ,但这并不意味着在其余时间忽略它。

例如,如果您定义一个大小为100的VarChar列,如果发送长度超过100个字符的字符串,即使数据库中的字段实际上可以容纳字符串,也会出现异常。

文档说如果不需要,则不应指定DbType,因为数据类型是从您使用的值推断出来的。但是,在某些情况下,您可能不希望它使用推断的DbType。

答案 1 :(得分:1)

肯定听起来像MSDN文章可能会误导......然而,LINQ-to-SQL虽然还活着,却没有获得大量的开发时间,所以我不会屏住呼吸等待更新

您可以在连接上发帖,或者可以在MSDN页面上添加备注(社区内容)。