2016-07-09 2 views
1

Ich denke meine Abfrage funktioniert nicht wegen der Enum-Flag, das ich habe.Wie Verwenden von Enum Flags mit 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)); 

In meiner SQL-Datenbank ist die Spalte eine Spalte "int". und hat jetzt einen Wert von "8", wenn ich es in Permissions ändere. Dann werde ich den Datensatz zurückbekommen.

+0

nein EF übersetzt HasFlag nicht in SQL, Sie müssen es selbst tun, bevor Sie es an die Abfrage übergeben: myFlag = None | Lesen und übergeben Sie myFlag an die firstOrDefault –

+0

Sie können jedoch bitweise Operatoren verwenden und sie werden übersetzt (z. B. "x => (x.Permission & Permissions.Write)! = 0') – Pawel

Antwort

1

Permissions.Full sollte nicht 8, sondern 7 sein, wenn es Lesen + Schreiben + Löschen bedeutet. In binären

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

In Ihrem Fall Sie gefragt werden, ob das zweite Bit (das heißt %0010) in %1000 gesetzt wird, das offensichtlich ist es nicht.

+0

Danke. Ich denke, das war es. Ich habe mich gefragt, aber das Beispiel, das ich kopiert habe, hatte 8. Ich denke, es war auch falsch. – chobo2