Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架作为对象读取的sql_变量无法转换为其实际类型_C#_Sql_Entity Framework - Fatal编程技术网

C# 使用实体框架作为对象读取的sql_变量无法转换为其实际类型

C# 使用实体框架作为对象读取的sql_变量无法转换为其实际类型,c#,sql,entity-framework,C#,Sql,Entity Framework,我有一个使用实体框架连接的大型数据库。其中一个表有一个类型为sql\u variant的列,实体不支持该列,因此我使用一些原始sql读取它 string MinWeight = CEntity.Database.SqlQuery<string>(MinQuery).FirstOrDefault(); string MinWeight=CEntity.Database.SqlQuery(MinQuery.FirstOrDefault(); 这很管用。。直到一个数据问题意味着我们关心

我有一个使用实体框架连接的大型数据库。其中一个表有一个类型为
sql\u variant
的列,实体不支持该列,因此我使用一些原始sql读取它

string MinWeight = CEntity.Database.SqlQuery<string>(MinQuery).FirstOrDefault();
string MinWeight=CEntity.Database.SqlQuery(MinQuery.FirstOrDefault();
这很管用。。直到一个数据问题意味着我们关心的记录中有1%在那个sql_变量中存储了一个数字,而上面给了我一个强制转换异常。我测试了这个,它很好地读取了值

double MinWeightdouble = CEntity.Database.SqlQuery<double>(MinQuery).FirstOrDefault();
double-MinWeightdouble=CEntity.Database.SqlQuery(MinQuery.FirstOrDefault();
但由于我需要同时处理double(SQL数字)和string,所以我尝试了

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

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

我不确定这是否会对您有所帮助,但在T-SQL世界中,您可以通过SQL\u variant\u属性“询问”SQL\u variant值以了解底层数据类型 .
您想通过向EF传递值和基类型来尝试这种方法吗

我不确定这是否会对您有所帮助,但在T-SQL世界中,您始终可以通过SQL\u variant\u属性“询问”SQL\u variant值以了解底层数据类型 .
您想通过向EF传递值和基类型来尝试这种方法吗

我没有时间为此设置测试环境,但是
Convert.ToDouble(minWeightVariant)
呢。我没有时间为此设置测试环境,但是
Convert.ToDouble(minWeightVariant)
呢。对于只读,可以为每个预期数据类型创建一个具有单独列的视图,并在sql_variant_属性(BaseType)属性兼容时填充它。然后将视图导入EF。对于只读,可以为每个预期数据类型创建一个具有单独列的视图,并在sql_variant_属性(BaseType)属性兼容时填充它。然后将视图导入EF。