2016-07-09 3 views
1

Я думаю, что мой запрос не работает из-за флага enum, который у меня есть.Как использовать флаги 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», если я изменю его на Permissions.Full, тогда я верну запись.

+0

no EF не переведёт HasFlag в SQL, вы должны сделать это сами, прежде чем передавать его в запрос: myFlag = None | Чтение и передача myFlag в firstOrDefault –

+0

Вы можете использовать побитовые операторы, и они будут переведены (например, 'x => (x.Permission & Permissions.Write)! = 0') – Pawel

ответ

1

Permissions.Full не должно быть 8, но 7, если это означает «Читать + писать + удалить». В двоичном

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

В вашем случае вы спрашиваете, является ли второй бит (т.е. %0010) устанавливается в %1000, который, очевидно, это не так.

+0

Спасибо. Я думаю, что так оно и есть. Мне было интересно, но пример, на который я скопировал, был 8. Я думаю, это было неправильно. – chobo2

Смежные вопросы