Orm 如何将存储过程映射中的数字类型转换为实体框架4中的复杂类型?
我们在Microsoft SQL Server中有两个存储过程,它们返回概念上相同类型的数据。一个返回一个ID作为SCOPE_TDENTITY()(一个数字),而另一个返回0(一个int32)。我们有一个属性ID为的复杂类型。如果此属性是可为空的十进制数,则在枚举返回int32的存储过程的结果时会收到以下错误:Orm 如何将存储过程映射中的数字类型转换为实体框架4中的复杂类型?,orm,c#-4.0,entity-framework-4,Orm,C# 4.0,Entity Framework 4,我们在Microsoft SQL Server中有两个存储过程,它们返回概念上相同类型的数据。一个返回一个ID作为SCOPE_TDENTITY()(一个数字),而另一个返回0(一个int32)。我们有一个属性ID为的复杂类型。如果此属性是可为空的十进制数,则在枚举返回int32的存储过程的结果时会收到以下错误: The 'ID' property on 'EntitryRequestReturn' could not be set to a 'Int32' value. You must set
The 'ID' property on 'EntitryRequestReturn' could not be set to a 'Int32' value. You must set this property to a non-null value of type 'Decimal'.
将属性类型更改为int32只会将错误移动到其他存储过程,数据类型按相反顺序列出。更改类型是否可为null没有任何区别
在构造复杂类型时,如何让EF4将存储过程返回的int列转换为十进制?这在我的实例中有效。这可能会有帮助 如果存储过程通过select语句返回数据,则强制转换所有返回字段会有很大帮助,即使它们是本机数据类型
select convert(int, myInt) as myInt
比
select myInt
很多时候,我的SPs会将字符串显示为最后一个字段,而实际上它是一个Int32。我在所有字段中添加了convert语句,它再也没有犯过这样的错误
也就是说,您只需在SP中进行转换,然后再将其发送到EF。这在我的实例中有效。这可能会有帮助 如果存储过程通过select语句返回数据,则强制转换所有返回字段会有很大帮助,即使它们是本机数据类型
select convert(int, myInt) as myInt
比
select myInt
很多时候,我的SPs会将字符串显示为最后一个字段,而实际上它是一个Int32。我在所有字段中添加了convert语句,它再也没有犯过这样的错误
也就是说,您可以在SP发送到EF之前在SP中进行转换。我们就是这么做的。我们的大多数问题都是由SCOPE_标识引起的,我们现在将其作为一个整数丢弃。为了使用EF,我们将更改返回类型的存储过程视为bug,并修复存储过程。这就是我们所做的。我们的大多数问题都是由SCOPE_标识引起的,我们现在将其作为一个整数丢弃。为了使用EF,我们将更改返回类型的存储过程视为bug,并修复存储过程。