2017-12-29 19 views
1

Ich habe diese benutzerdefinierte Spalte in der gespeicherten Prozedur. Wie Sie sehen können, gibt es keine Möglichkeit ihr Wert immer null sein würde:Entity Framework Force CASE-WHEN-Spalte, die nicht nullbar sein darf

cast(case when (s.userName is not null and s.Username in ('super','superadmin') then 1 
    else 0 end 
    as bit) as isSuperAdmin 

Aber wenn ich es zu Entity Framework abzubilden, verwandelt es sich in Nullable: enter image description here

Welche Ordnung ist, aber ich muss gehen sie wie folgt, und es ist hässlich:

var isSuperAdmin = (!user.isSuperAdmin.HasValue) ? false: user.isSuperAdmin.Value; 

ist es eine Möglichkeit, es zu zwingen, einen Boolean Wert zu sein?

Antwort

2

SQL Server behandelt die Werte der meisten berechneten Ausdrücke wie nullable gewickelt, es sei denn in ISNULL

Dies sollte

ISNULL(CASE WHEN s.Username in ('super','superadmin') THEN CAST(1 AS BIT) END,0) as isSuperAdmin 

arbeiten Es besteht keine Notwendigkeit für die s.userName is not null Prüfung. Wenn es mit IN übereinstimmt, ist es nicht NULL.

Verwandte Themen