【问题标题】:Why does Entity Framework return ObjectResult<Nullable<int>> for a stored procedure which returns a Not Null column?为什么实体框架为返回 Not Null 列的存储过程返回 ObjectResult<Nullable<int>>?
【发布时间】:2014-01-03 18:17:18
【问题描述】:

我有一个简单的存储过程,它从表中返回一个主键(所以它不是 NULL)。

CREATE PROCEDURE spGetActiveUsers
AS
BEGIN
    SELECT UserID FROM Users WHERE Active=1
END

当我在 EF 4.0 中创建函数并在设计器窗口中选择它以返回一个集合 if Int32 时,它会创建存储过程:

ObjectResult<Nullable<int>> spGetActiveUsers();

但它永远不能在集合中返回 NULL 值。因此,要获得不可为空的整数列表,我必须调用:

int[] results = context.spGetActiveUsers().Select(u => u.Value).ToArray();

这似乎不对:它不应该知道它不能包含空值吗?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    因为当您更新 edmx 时没有为您的存储过程创建类,这会导致您的存储过程返回 int 值类型而不是数据类型a

    【讨论】:

    • 但我希望它返回 Int 值而不是类。但相反,它返回 int?值。
    【解决方案2】:

    在所有情况下强制将存储过程的返回标量值设为 NOT NULL。

    我的意思是,例如

    声明@ReturnScalar INT
    --您的存储过程在这里--
    RETURN ISNULL(@ReturnScalar,0)

    以上语句确保您永远不会返回 null 并且 edmx 会将其视为非 null

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2015-05-14
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      相关资源
      最近更新 更多