考虑使用以下定义的 SQL Server 表varchar(1) NULL
场地。它被用来存储性别特征。有些行有数据,有些没有:要么为空,要么为空白。授予空白应该为空,但请考虑空白在这里是一个有效值。我更希望该值为空。
ID Gender
1 'M'
4 'M'
3 ''
4 'F'
运行 Linq To Sql 查询时会引发异常,其中值someID
is 3.
var emp = (from e in db.Employees
where e.ID == someID
select e);
例外:
字符串必须正好是一个字符长。
Question: 请问这个异常的原因是什么?可以采取什么措施来预防或消除这个问题?
检查Employee
LINQ to SQL 设计器为您创建的类型。最有可能的类型是Gender
财产是System.Char
(这是 LINQ to SQL 设计器使用的类型varchar(1)
)并且应该改为System.String
以正确匹配您的数据库架构。
事实上,LINQ to SQL 设计器解释了varchar(1)
as a System.Char
考虑到这是有效的 T-SQL,这是愚蠢的:
declare @foo varchar(1);
set @foo = '';
这是invalid C#:
Char foo = '';
由于生成的属性类型限制太多,您需要将其更改为System.String
.
Note: 您可能需要考虑在属性的 setter 内部添加一些验证,以便在字符串长度大于 1 时引发异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)