.net - Column.DbType 影响运行时行为

标签 .net linq-to-sql

根据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/

相关文章:

java - 保证 Java 客户端可以使用 .NET WCF 服务

c# - 将 JSON 字符串解析为对象的最简单的 C# 函数是什么?

c# - 更改 IQueryable 的 DataContext

c# - 枚举整个 LinqToSql 对象

c# - System.Drawing.Color 的 SQL 数据类型

c# - 我可以通过编程方式在内存中创建虚拟磁盘吗?

.net - 制作结构数组的只读副本的最快方法?

c# - 当数据库中的数据发生更改时,LINQ to SQL 不会更新

sql - 是否可以在 Visual Studio 2010 中为 Microsoft SQL Server 开发数据库应用程序,然后改用 MySQL?

c# - LINQ to SQL - 具有 List<T> 属性的自定义对象