我有一个简单的存储过程,它从表中返回一个主键(因此它是非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();
这似乎不对:它不应该知道它不能包含空值吗?
答案 0 :(得分:0)
因为更新edmx时没有创建存储过程的类,这会导致存储过程返回类型的int值而不是dataa的类型
答案 1 :(得分:0)
在所有情况下强制将存储过程的返回标量值设置为NOT NULL。
我的意思是,例如
DECLARE @ReturnScalar INT
- 你的存储程序在这里 -
返回ISNULL(@ ReturnScalar,0)
上述语句确保您永远不会返回null,而edmx会将此视为非空
由于