使用C#重写原项目软件时(原语言VB6)。DBMS是SQL2005。昨天把基表A的一个外键类型修改了:smallint->int。结果今天在LINQ中引用视图(表A上),结果弹错“指定的转换无效”。
在LINQ中直接引用了表A的实例,数据是正常返回的。看来问题就出在视图上。百度搜了一圈,坛子里找到一个比较靠谱的文章:是LINQ的实体类定义与数据库端不符。
即对表A的列定义和LINQ的实体类进行比对。
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Pri_User_ID", DbType="SmallInt")]
public System.Nullable<int> Pri_User_ID
{
get
{
return this._Pri_User_ID;
}
set
{
if ((this._Pri_User_ID != value))
{
this._Pri_User_ID = value;
}
}
}
问题就出在DbType="SmallInt",我已经修改表A该列是Int。可是引入LINQ还是未修改的列类型。
即在dbml文件中删除该视图。从【服务器资源管理器】重新引入视图,为保无误,重新连接服务器,刷新表、视图。结果表A的Pri_User_ID列类型还是smallint。
只好在 LINQ的designer.cs中修改成DbType="Int"。再次调试。结果正常。