使用Entity Framework作为对象读取的sql_variant不能转换为其实际类型

时间:2014-06-10 19:27:17

标签: c# sql entity-framework

我有一个大型数据库,我使用Entity Framework进行连接。其中一个表有一个sql_variant类型的列,实体不支持,所以我使用一些原始SQL读取它。

string MinWeight = CEntity.Database.SqlQuery<string>(MinQuery).FirstOrDefault();

哪个工作正常..直到数据问题意味着我们关心的1%的记录在sql_variant中存储了一个数字,而上面给了我一个强制转换异常。我测试了这个并且它以精细的方式读取了值

double MinWeightdouble = CEntity.Database.SqlQuery<double>(MinQuery).FirstOrDefault();

但是因为我需要处理double(SQL数字)和字符串,所以我试过

object MinWeightVariant = CEntity.Database.SqlQuery<object>(MinQuery).FirstOrDefault();

我认为我可以很容易地将其强制转换为字符串或双精度,但事实并非如此。尝试强制转换为double会给我一个关于如何将对象强制转换为double的错误,MinWeightVariant.GetType()只给我一个System.Object。看起来,虽然它在sql读取深处知道它是数字的,但是当它被分配给一个对象时数据会丢失。知道如何以合理的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不确定这是否对您有所帮助,但在T-SQL世界中,您始终可以“查询”sql_variant值,以通过 SQL_VARIANT_PROPERTY 查找基础数据类型 http://msdn.microsoft.com/en-au/library/ms178550.aspx。 您想通过将Value和Base Type传递给EF来尝试这种方法吗?