EDMX生成Nullable bool而不是bool

时间:2014-07-30 21:09:55

标签: c# sql sql-server entity-framework stored-procedures

我编写了一个返回一个select的简单存储过程。

当我更新了我的EDMX model并添加了新的存储过程时,我想知道返回的结果有一个Nullable bool(在存储过程中我总是返回0或1)。

为什么它会产生Nullable bool而不是bool?如何更改存储过程以便生成bool?

这是存储过程(这不是真正的存储过程,它只是为了演示问题):

ALTER PROCEDURE [dbo].[TestBool]
AS
BEGIN
    SET NOCOUNT ON;

    SELECT  Title,
            CONVERT(BIT, IIF([Address] = 'America', 1, 0)) IsAmerica,
            CONVERT(BIT, IIF(Duration > 100, 1, 0)) IsLong
    FROM    dbo.Events
    WHERE   UserId > 10
END

Address不为空,而Duration为空(但这并不重要,因为这两个值都生成为Nullable bool)。

以下是EDMX结果的图片。

enter image description here

提前致谢:)

2 个答案:

答案 0 :(得分:1)

不是解决您的问题而是替代方案。如果您使用表变量并将其返回(如

),该怎么办?
ALTER PROCEDURE [dbo].[TestBool]
AS
BEGIN
DECLARE @tab table (
Title varchar(100) not null,
IsAmerica bit not null,
IsLong bit not null
);

    SET NOCOUNT ON;

    INSERT INTO @tab(Title,IsAmerica,IsLong)
    SELECT  Title,
            CONVERT(BIT, IIF([Address] = 'America', 1, 0)) IsAmerica,
            CONVERT(BIT, IIF(Duration > 100, 1, 0)) IsLong
    FROM    dbo.Events
    WHERE   UserId > 10


    SELECT Title,
           IsAmerica,
           IsLong 
           FROM @tab;
END

答案 1 :(得分:0)

仅使用ConvertCast并不能保证edmx上的输出为空。您需要使用isnull()包装整个内容,如下所示:

isnull(cast(case when myBooleanField is not null then 1 else 0 end as bit),0) as IsBooleanValue