|
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) Он поменьше, но при этом больше возможностей
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |