此代码抛出错误“格式异常。字符串必须正好一个字符长”。我不明白为什么。有什么想法吗?
var contract = (from c in db.SM_CONTRACTs
where c.CON_TUK2 != null
&& c.CON_TUK2 == req.Imei
select c).FirstOrDefault();
req.Imei看起来像“8944200005977030038”
数据上下文像:
[Column(Storage="_CON_TUK2", DbType="VarChar(20)")]
public string CON_TUK2
{
get
{
return this._CON_TUK2;
}
set
{
if ((this._CON_TUK2 != value))
{
this.OnCON_TUK2Changing(value);
this.SendPropertyChanging();
this._CON_TUK2 = value;
this.SendPropertyChanged("CON_TUK2");
this.OnCON_TUK2Changed();
}
}
}
答案 0 :(得分:4)
可能发生的事情是数据库中的SM_CONTRACTs表有一个或多个varchar(1)(或nvarchar(1))列。代码生成器会将其转换为模型中的System.Char。只要数据不是一个字符,这将抛出FormatException。
尝试在模型设计器中查找此列,并将Code Generation - Type属性更改为“String”。
答案 1 :(得分:0)
它不一定与您在特定linq查询中(或在where
语句中)使用的字段有关!
它可能是您的任何模型字段CHAR(1)
,但存储的数据为“空字符串”。哪个适用于sql CHAR
类型,但不适用于<#1}}中的。
将此字段类型更改为System.Char
应该很容易解决。