| 
    
        
     
     | 
    
  | 
C# - как реализовать перечисление из 1с? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Sabre    
     16.08.21 
            ✎
    09:06 
 | 
         
        1 Абстрактная модель всех перечислений:
 
        namespace Schools.Abstract { public class IEnumeration { public virtual string Name { get; set; } } } 2 Непосредственно перечисление: namespace Schools.Models.Enumeration { public class BuildingType : IEnumeration { public override string Name { get; set; } } } 3 (использование перечисления): public class Building { ... public BuildingType BuildingType { get; set; } // Тип здания } Смущает, что это не единичный экземпляр, и подобных объектов перечислений можно насоздавать неограничено. Так же не знаю, как сделать список доступных значений, а не что угодно.  | 
|||
| 
    1
    
        Василий Алибабаевич    
     16.08.21 
            ✎
    09:09 
 | 
         
        (0) Куда то вы не туда...
 
        Вот оно : enum Season { Spring, Summer, Autumn, Winter }  | 
|||
| 
    2
    
        Василий Алибабаевич    
     16.08.21 
            ✎
    09:13 
 | 
         
        + (1) 
 
        Season x = Season.Summer; Хотя и не рекомендуется использовать. Оно хуже чем Object. Но под ваши требования ЦЫ()"сделать список доступных значений, а не что угодно" вполне себе.  | 
|||
| 
    3
    
        Sabre    
     16.08.21 
            ✎
    09:15 
 | 
         
        (1) (2) Хранить перечисление в таблицах SQL - неправильно? Значения непосредственно в коде хранится, как в (1), а в таблицах SQL, использующих перечисление, значение в столбце это просто строка (sting) ?     
         | 
|||
| 
    4
    
        Волшебник    
     модератор 
    16.08.21 
            ✎
    09:25 
 | 
         
        (3) лучше хранить числа, а перечисление объявить так:
 
        public enum Season { Spring = 1, Summer = 2, Autumn = 3, Winter = 4 }  | 
|||
| 
    5
    
        Sabre    
     16.08.21 
            ✎
    09:37 
 | 
         
        (4) точно, спасибо!     
         | 
|||
| 
    6
    
        Василий Алибабаевич    
     16.08.21 
            ✎
    10:01 
 | 
         
        (3) Стоп. В заголовке темы нигде нет упоминания за SQL. 
 
        В КОДЕ. Рекомендуется использовать Object вместо enum. По сути к элементам перечисления можно обращаться по индексу. В SQL вы точно также не сможете хранить ни enum ни Object. Логично в БД хранить индексы значений типа enum. Ограничить список значений доступных к записи в таблицу SQL можно при помощи триггеров. Но это уже не относится к C#.  | 
|||
| 
    7
    
        Sabre    
     16.08.21 
            ✎
    10:35 
 | 
         
        (6) Чем Object лучше?
 
        Про то, что их не записать в таблицу и так знаю, понимаю, что нужно писать что-либо из примитивных типов - строку или индекс.  | 
|||
| 
    8
    
        Дык ё    
     16.08.21 
            ✎
    11:05 
 | 
         
        (7) в данном случае object хуже - enum хранится в стеке, с ним нет затрат на упаковку и gc     
         | 
|||
| 
    9
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    11:11 
 | 
         
        (0) Почитай про ORM     
         | 
|||
| 
    10
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    11:13 
 | 
||||
| 
    11
    
        Sabre    
     16.08.21 
            ✎
    11:16 
 | 
         
        (10) Я на Entity Framwork и строю. Не знаю, как организована реляционная база данных в Entity Framwork, делаю в полях идентификаторы строк других таблиц.     
         | 
|||
| 
    12
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    11:18 
 | 
         
        (11) Имхо ты слегка ошибся форумом     
         | 
|||
| 
    13
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    11:21 
 | 
         
        но "делаю в полях идентификаторы строк других таблиц" чушь
 
        там по ORM модели просто связанные объекты, а в реляции фреймворк сам укладывает если Enum сделать то просто числовое поле будет в табличке, причем длину поля подберет от длины перечисления  | 
|||
| 
    14
    
        Sabre    
     16.08.21 
            ✎
    11:26 
 | 
         
        (13) Ок, передам логику библиотеке. Пойду вкуривать документацию.     
         | 
|||
| 
    15
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    11:41 
 | 
         
        (14) большинство ORM фреймворков они сами умеют таблицы с нужными полями создавать по объектной модели
 
        хотя и вручную можно но зачем? некоторые умеют в обратную сторону по таблицам в бд создать шаблоны классов, затем их правишь/допиливаешь  | 
|||
| 
    16
    
        Sabre    
     16.08.21 
            ✎
    11:43 
 | 
         
        (15) Вот сейчас и попробую накидать классы и посмотреть, что насоздает EF из них в SQL.
 
        Тяжело грызть гранит науки. Я уже позабыл какого это с тех пор как 1с освоил.  | 
|||
| 
    17
    
        Serginio1    
     16.08.21 
            ✎
    11:45 
 | 
||||
| 
    18
    
        Sabre    
     16.08.21 
            ✎
    11:48 
 | 
         
        (16) Глянул. EF делает то же самое, что делал и я, только у него имя столбца связанной таблицы "AreaId", а у меня "Area_Id". Значение то же самое - ID совпадает. Ну хоть мыслим с EF одинаково.     
         | 
|||
| 
    19
    
        Sabre    
     16.08.21 
            ✎
    11:49 
 | 
         
        (17) Спасибо за ссылку, почитаю, когда свое закончу. Мы же русские так делаем, открываем инструкцию когда уже сломаем)     
         | 
|||
| 
    20
    
        Ыцшесрук    
     16.08.21 
            ✎
    11:53 
 | 
         
        (15) Собсно, EF и умеет.     
         | 
|||
| 
    21
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    11:55 
 | 
         
        (20) когда я работал с EF он только-только появился первой версии
 
        сча вроде как 4-я  | 
|||
| 
    22
    
        Ыцшесрук    
     16.08.21 
            ✎
    12:07 
 | 
         
        (21) Разве не шестая?     
         | 
|||
| 
    23
    
        DTX 4th    
     16.08.21 
            ✎
    12:08 
 | 
         
        (21) EF-Core сейчас уже, он кроссплатформенный (ага, дождались, когда уже не нужно было). Да, все это здорово, но я просто оставлю это здесь:
 
        https://www.prisma.io/ (18) Не понял. Что делает EF? У тебя в (0) перечисления сделаны через экземпляры класса? Ну и перечисления в 1С, имхо, сложнее устроены.  | 
|||
| 
    24
    
        Serginio1    
     16.08.21 
            ✎
    12:18 
 | 
         
        Linq2DB более эффективней 
 
        https://github.com/linq2db/linq2db https://linq2db.github.io/index.html http://rsdn.org/forum/prj.rfd/7762424.flat  | 
|||
| 
    25
    
        Garykom    
     гуру 
    16.08.21 
            ✎
    12:19 
 | 
         
        (23) а к призме случайно UI нету? с нормальными гридами     
         | 
|||
| 
    26
    
        DTX 4th    
     16.08.21 
            ✎
    12:36 
 | 
||||
| 
    27
    
        Serginio1    
     16.08.21 
            ✎
    14:30 
 | 
         
        (26) Он поменьше, но при этом больше возможностей     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |