Вы должны сделать что-то вроде этого:
[Flags]
public enum PermissionsB
{
Aucun = 0,
read = 1,
write= 2,
ssss = 4,
tttt = 8,
rrrr = 16,
}
или с помощью C# 7 числовой литерал синтаксис, который может улучшить читаемость:
[Flags]
public enum PermissionsB
{
Aucun= 0b00000,
read = 0b00001,
write= 0b00010,
ssss = 0b00100,
tttt = 0b01000,
rrrr = 0b10000,
}
Тогда как сказал Джеффри, вы должны использовать битовые операции:
PermissionsB permission = PermissionsB.read | PermissionsB.write;
значение, которое вы будете хранить это целое число, вы можете привести его непосредственно:
int intPermission = (int) permission;
Чтобы восстановить сохраненные разрешения, которые вы можете просто сделать так:
PermissionsB retrievedPermission = (PermissionsB) retrievedInteger;
Чтобы проверить отдельные разрешения, просто использовать битовые операции:
bool canWrite = (retrievedPermission & PermissionsB.write) == PermissionsB.write;
Entity Framework (я думаю, что EF> 4.5, если я хорошо помню) может управлять tranparently типами Enum, поэтому вам не нужно включать в Integer и из Integer в базе данных, я настоятельно рекомендую использовать EF, если ваша спина Поддерживается база данных -end.
Так этот вопрос только о сохранении значения int в вашей базе данных? Или вы не знаете, как преобразовать значение enum в int? Можете ли вы уточнить свою проблему? – StriplingWarrior
на самом деле ваши двоичные флаги не являются бинарными, вы должны использовать префикс 0x для десятичного числа, чтобы сохранить его как двоичный, вы можете просто выполнить операцию ИЛИ, чтобы добавить разрешения вместе в один двоичный номер и сохранить его в своей базе данных. – CME64
@ CME64 '0x' является шестнадцатеричным, а не двоичным. –