Вход | Регистрация
 
Информационные технологии :: Администрирование

C# - как реализовать перечисление из 1с?

C# - как реализовать перечисление из 1с?
Я
   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. Но под ваши требования ЦЫ()"сделать список доступных значений, а не что угодно" вполне себе.
   Sabre
 
3 - 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
}
   Sabre
 
5 - 16.08.21 - 09:37
(4) точно, спасибо!
   Василий Алибабаевич
 
6 - 16.08.21 - 10:01
(3) Стоп. В заголовке темы нигде нет упоминания за SQL.
В КОДЕ. Рекомендуется использовать Object вместо enum. По сути к элементам перечисления можно обращаться по индексу.
В SQL вы точно также не сможете хранить ни enum ни Object. Логично в БД хранить индексы значений типа enum.
Ограничить список значений доступных к записи в таблицу SQL можно при помощи триггеров. Но это уже не относится к C#.
   Sabre
 
7 - 16.08.21 - 10:35
(6) Чем Object лучше?
Про то, что их не записать в таблицу и так знаю, понимаю, что нужно писать что-либо из примитивных типов - строку или индекс.
   Дык ё
 
8 - 16.08.21 - 11:05
(7) в данном случае object хуже - enum хранится в стеке, с ним нет затрат на упаковку и gc
   Garykom
 
9 - 16.08.21 - 11:11
(0) Почитай про ORM
   Garykom
 
10 - 16.08.21 - 11:13
(9)+ https://qna.habr.com/q/47

обычно Entity Framwork юзают в C#
   Sabre
 
11 - 16.08.21 - 11:16
(10) Я на Entity Framwork и строю. Не знаю, как организована реляционная база данных в Entity Framwork, делаю в полях идентификаторы строк других таблиц.
   Garykom
 
12 - 16.08.21 - 11:18
(11) Имхо ты слегка ошибся форумом
   Garykom
 
13 - 16.08.21 - 11:21
но "делаю в полях идентификаторы строк других таблиц" чушь
там по ORM модели просто связанные объекты, а в реляции фреймворк сам укладывает
если Enum сделать то просто числовое поле будет в табличке, причем длину поля подберет от длины перечисления
   Sabre
 
14 - 16.08.21 - 11:26
(13) Ок, передам логику библиотеке. Пойду вкуривать документацию.
   Garykom
 
15 - 16.08.21 - 11:41
(14) большинство ORM фреймворков они сами умеют таблицы с нужными полями создавать по объектной модели
хотя и вручную можно но зачем?

некоторые умеют в обратную сторону по таблицам в бд создать шаблоны классов, затем их правишь/допиливаешь
   Sabre
 
16 - 16.08.21 - 11:43
(15) Вот сейчас и попробую накидать классы и посмотреть, что насоздает EF из них в SQL.
Тяжело грызть гранит науки. Я уже позабыл какого это с тех пор как 1с освоил.
   Serginio1
 
17 - 16.08.21 - 11:45
   Sabre
 
18 - 16.08.21 - 11:48
(16) Глянул. EF делает то же самое, что делал и я, только у него имя столбца связанной таблицы "AreaId", а у меня "Area_Id". Значение то же самое - ID совпадает. Ну хоть мыслим с EF одинаково.
   Sabre
 
19 - 16.08.21 - 11:49
(17) Спасибо за ссылку, почитаю, когда свое закончу. Мы же русские так делаем, открываем инструкцию когда уже сломаем)
   Ыцшесрук
 
20 - 16.08.21 - 11:53
(15) Собсно, EF и умеет.
   Garykom
 
21 - 16.08.21 - 11:55
(20) когда я работал с EF он только-только появился первой версии
сча вроде как 4-я
   Ыцшесрук
 
22 - 16.08.21 - 12:07
(21) Разве не шестая?
   DTX 4th
 
23 - 16.08.21 - 12:08
(21) EF-Core сейчас уже, он кроссплатформенный (ага, дождались, когда уже не нужно было). Да, все это здорово, но я просто оставлю это здесь:
https://www.prisma.io/

(18) Не понял. Что делает EF?
У тебя в (0) перечисления сделаны через экземпляры класса?

Ну и перечисления в 1С, имхо, сложнее устроены.
   Serginio1
 
24 - 16.08.21 - 12:18
   Garykom
 
25 - 16.08.21 - 12:19
(23) а к призме случайно UI нету? с нормальными гридами
   DTX 4th
 
26 - 16.08.21 - 12:36
(25) Есть, из коробки
https://www.prisma.io/studio

(24) Эффективнее чем EFCore?
   Serginio1
 
27 - 16.08.21 - 14:30
(26) Он поменьше, но при этом больше возможностей


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.