代码之家  ›  专栏  ›  技术社区  ›  Cirdec

如何将映射中的数字类型从存储过程转换为实体框架4中的复杂类型?

  •  2
  • Cirdec  · 技术社区  · 15 年前

    我们在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 this property to a non-null value of type 'Decimal'.
    

    将属性的类型更改为Int32只会将错误移动到另一个存储过程,数据类型以相反的顺序列出。更改类型是否可以为空没有任何区别。

    构造复杂类型时,如何让EF4将存储过程返回的int列转换为十进制?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Zachary Scott    15 年前

    这在我的例子中有效。这可能有帮助。

    如果存储过程通过select语句返回数据,那么强制转换所有返回字段将非常有帮助,即使它们是在其本机数据类型中。

    select convert(int, myInt) as myInt
    

    select myInt
    

    很多时候,当一个字符串实际上是一个Int32时,我的SPS会将它显示为最后一个字段。我在所有字段中添加了convert语句,它再也没有犯过这个错误。

    也就是说,在发送到ef之前,您可以在sp中进行转换。

    推荐文章