根据MSDN docs ,列类型/元素的 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
最佳答案
仅当您要创建表时才需要 DbType,但这并不意味着在其余时间它会被忽略。
例如,如果您定义大小为 100 的 VarChar 列,则如果您发送的字符串长度超过 100 个字符,即使数据库中的字段实际上可以容纳该字符串,您也会收到异常。
文档指出,如果不需要,则不应指定 DbType,因为数据类型是根据您使用的值推断出来的。但是,在某些情况下,您可能不希望它使用推断出的 DbType。
关于.net - Column.DbType 影响运行时行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751427/