为什么Entity Framework返回ObjectResult <nullable <int>&gt;对于返回Not Null列的存储过程?</nullable <int>

时间:2014-01-03 18:17:18

标签: entity-framework

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

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

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

ObjectResult<Nullable<int>> spGetActiveUsers();

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

我的意思是,例如

DECLARE @ReturnScalar INT
- 你的存储程序在这里 -
返回ISNULL(@ ReturnScalar,0)

上述语句确保您永远不会返回null,而edmx会将此视为非空

由于