2016-07-09 4 views
1

私の質問は、私が持っている列挙フラグのために動作していないと思います。EnumフラグをEF 6.1.3で使用する方法?

[Flags] 
    public enum Permissions 
    { 
     None = 0, 
     Read = 1, 
     Write = 2, 
     Delete = 4, 
     Full = 8 
    } 


dbContext.UserStorages.FirstOrDefault(x => x.Permission.HasFlag(Permissions.Write)); 

私のSQLデータベースでは、列は「int」列です。私がパーミッションに変更した場合、現在は「8」の値を持っています。完全に、私はレコードを取り戻します。

+0

いいえEFはHasFlagをSQLに変換しません。あなたは自分自身でそれを行う必要があります。myFlag = None | myFlagを読み取ってfirstOrDefaultに渡します。 –

+0

ビット演算子を使用することはできますが、それらは変換されます(例えば 'x =>(x.Permission&Permissions.Write)!= 0') – Pawel

答えて

1

Permissions.Fullは、読み込み+書き込み+削除を意味する場合は8、7ではなく7にします。あなたのケースでは

Read -> %001 
Write -> %010 
Delete -> %100 
Full -> Read | Write | Delete -> %001 | %010 | %100 -> %111 -> 7 

バイナリ

では、第2ビット(つまりは %0010)それはない、明らかにされ %1000に設定されているかどうかを尋ねています。

+0

ありがとう。私はこれがそうだったと思う。私はそれについて疑問を抱いていましたが、私がコピーした例は8だった。私はそれも間違っていたと思う。 – chobo2

関連する問題