У меня есть следующее перечисление:
[Flags]
public enum PostAssociations
{
None = 0x0,
User = 0x1,
Comments = 0x2,
CommentsUser = 0x3
}
В качестве начального замечания я не уверен, верны ли эти флаги.
Я делаю это так, чтобы у меня был свободный способ определения «Включений» для Entity Framework (поскольку метод EF Include принимает строку, которую я не хочу показывать в пользовательском интерфейсе).
Итак, я хочу, чтобы мой сервисный уровень мог принимать PostAssociations , а в моем сервисном слое я использую метод расширения, чтобы преобразовать это в строку []. (который затем разделяет мой репо, чтобы сделать .Include).
Я не так много сделал с Flags Enum, поэтому прошу прощения за свое невежество. :)
Это «таблица истинности» того, что я хочу (значение enum, преобразованная строка [])
None = null
User = new string[] { "User" }
Comments = new string[] { "Comments" }
User, Comments = new string[] { "User", "Comments" }
Comments, CommentsUser = new string[] { "Comments", "Comments.User" }
User, Comments, CommentsUser = new string[] { "User", "Comments", "Comments.User" }
Не может иметь КомментариевПользователь без Комментариев.
Так что мне нужна помощь с тремя вещами:
- Как настроить enum в соответствии с таблицей истинности?
- Как мне вызвать сервисный уровень для одного из этих примеров?
- Как мне написать метод расширения для преобразования этого перечисления в массив строк?
Конечно, если вы, ребята, можете придумать лучший способ сделать то, что я пытаюсь сделать, я тоже это учту. По сути, я пытаюсь замаскировать «магические струны» EF Include за Enum, и учитывая, что вы можете сделать несколько включений (или ни одного), я подумал, что это хороший пример для Engs Flags.
Спасибо, ребята.