Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
.NET 4.x

linq2db и enum MapValue без использования MapValue

20.10.2021, 10:29. Показов 6925. Ответов 54

Студворк — интернет-сервис помощи студентам
Добрый день!

В этой теме касались enum Архитектура построения БД linq2db но ответа на мой вопрос там нет.


Есть класс таблицы БД MySQL

C#
1
2
3
4
5
6
    
    public class MyTable
    {
        [PrimaryKey, Identity] public int Id { get; set; }
        [Column, NotNull] public Status? Status { get; set; }
    }
Есть enum с MapValue

C#
1
2
3
4
5
    public enum Status
    {
        [MapValue(Value = "OFF")] OFF = 0,
        [MapValue(Value = "ON")] ON = 1,
    }

Таблица создаётся так, что значение Status это int
SQL
1
2
3
4
5
CREATE TABLE `MyTable` (
    `Id` INT NOT NULL AUTO_INCREMENT,
    `Status` INT(11) NOT NULL DEFAULT '-1',
    PRIMARY KEY (`Id`)
);
Так как в enum указаны MapValue то linq2db пытается получать тексты из MapValue, а мне нужны значения int = 0 а не "OFF"

Можно создать дубль enum без MapValue, но enum несколько десятков значений, и не хотелось бы дублировать.

Добавление типа int в класс MyTable DataType(LinqToDB.DataType.Int32) ничего не даёт.

C#
1
2
3
4
5
public class MyTable
    {
        [PrimaryKey, Identity] public int Id { get; set; }
        [Column, NotNull, DataType(LinqToDB.DataType.Int32)] public Status? Status { get; set; }
    }

Подскажите как лучше выйти из этого положения?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.10.2021, 10:29
Ответы с готовыми решениями:

Какую библиотеку подключить для использования enum
Компилятор ругается: fatal error C1083: Cannot open include file: 'enum_helper_pre.h': No such file or directory #include...

Поиск по неточному совпадению, без учета регистра, без использования стринга, в структуре
Собственно подскажите, пожалуйста, как такое организовать.

Преобразовать массив int в значения Enum без цикла
Есть некоторое перечисление public enum Turns { R, Rp, R2, U, Up, U2, F, Fp, F2 } Нужно по имеющемуся массиву int-ов...

54
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
24.10.2021, 18:50
Студворк — интернет-сервис помощи студентам
Катафалк, Если написать классы-модели + класс-репозитрий, в котором на "голом SQL" реализовать всю работу с БД (выборки, апдейты, инсерты и проч.) и весь функционал приложения свести к простым обращениям к репозиторию, обмениваясь с ним моделями - будет ли это, по Вашему мнению, "ORM" или нет ?
0
HF
 Аватар для HF
1321 / 901 / 200
Регистрация: 09.09.2011
Сообщений: 2,713
Записей в блоге: 2
25.10.2021, 00:25
Цитата Сообщение от Usaga Посмотреть сообщение
А он точно адекватный, этот заказчик? Обычно, когда людям нужно понимать что за перечисления в таблице, то заводят вторую таблицу (статический справочник) с текстовыми представлениями значений перечисления и делают внешний ключ на неё. Всё. Если заказчику нужно увидеть, что означают все эти 0, 1, 2... 100500, то он просто делает JOIN к справочнику.
Предположу что изначальный проект был сделан на MSAccess, где в полях держали названия перечислений. Ну и сейчас они не далеко ушли.
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
это желание заказчика, где ему нужно видеть зрително статусы в самой БД.
Видать кто-то в БД лазит всё ещё, тем же Access например, ну или "обученные юзеры" с доступом в БД умеющие запустить MSSMS и выполнить нужный запрос (и такое у меня в практике было не мало).
Кстати во второй случае ещё проще - нужно написать обновлённый запрос с JOIN и у них ничего на экране не изменится. А программисту лишняя проблема.
0
Эксперт .NET
 Аватар для Usaga
14349 / 9443 / 1359
Регистрация: 21.01.2016
Сообщений: 35,592
25.10.2021, 08:25
Цитата Сообщение от Катафалк Посмотреть сообщение
Совет выкинуть ОРМ из проекта не может быть мимо кассы, точно так же как и совет не удалять гланды через задний проход, если кто-то собирается такое сделать
Откуда взялась мысль о том, что ОРМ в проекте вещь лишняя и аналогичная операции через задницу? Аргументировать можете?

Добавлено через 2 минуты
Цитата Сообщение от HF Посмотреть сообщение
Предположу что изначальный проект был сделан на MSAccess, где в полях держали названия перечислений. Ну и сейчас они не далеко ушли.
Да, скорее всего. Но меня всё равно удивило желание заказчика диктовать схему хранилища, подогнанную под человекочитаемый вид, что бред изначально.

Вся данная тема и родилась из-за этой чертавни с перечислениями)
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
25.10.2021, 09:10
Цитата Сообщение от MsGuns Посмотреть сообщение
Если написать классы-модели + класс-репозитрий, в котором на "голом SQL" реализовать всю работу с БД (выборки, апдейты, инсерты и проч.) и весь функционал приложения свести к простым обращениям к репозиторию, обмениваясь с ним моделями - будет ли это, по Вашему мнению, "ORM" или нет ?
Зачем вы пытаетесь увести тему туда, где она уже была и ответ был дан? Вроде же не большая тема, можно и осилить прочитать полностью чтобы не спрашивать по несколько раз одно и то же. Повторяю, в чем здесь дело
Цитата Сообщение от Катафалк Посмотреть сообщение
Не исключено. Но в том то и дела, что под конкретный проект, а значит легко расширяем под любые требования, какие в будущем только могут возникнуть. А не ограничен в возможностях кастомизации фантазией его разработчиков.
Цитата Сообщение от Usaga Посмотреть сообщение
Откуда взялась мысль о том, что ОРМ в проекте вещь лишняя и аналогичная операции через задницу? Аргументировать можете?
Оттуда, что для работы с БД существует специальное средство, созданное именно для этой цели. SQL называется. Точно так же, как для удаления гланд существует отверстие, гораздо лучше подходящее для этой цели, чем задний проход. Но это лишь подводка к рассуждению. А само рассуждение о том, что ОРМы вредны для большого проекта берется уже из опыта их использования. Также, у кого нет опыта, но есть мозг, тоже может прийти к тому же выводу - надо только этот мозг напрячь чуть чуть. В чем именн там проблемы я опять же уже писал прямым текстом.
0
 Аватар для Andrey-MSK
3368 / 2254 / 388
Регистрация: 14.08.2018
Сообщений: 7,631
Записей в блоге: 4
25.10.2021, 09:16
Цитата Сообщение от Катафалк Посмотреть сообщение
SQL называется.
А кто мешает для простых целей использовать ORM, и для более сложных голый ADO .NET? И всё это в одном проекте. Чего тут сложного? На ORM повесить простенькие SELECT, UPDATE, DELETE, а если что посложнее, то уже писать через SqlCommand. Всё прекрасно уживается в одном проекте и даже спокойно общается через одни классы данных.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
25.10.2021, 09:20
Цитата Сообщение от Usaga Посмотреть сообщение
Да, скорее всего. Но меня всё равно удивило желание заказчика диктовать схему хранилища, подогнанную под человекочитаемый вид, что бред изначально.
Как раз наоборот, это отказ от человекочитаемости хранилища должен серьезно обосновываться. То, что вебокодер не может натянуть требования на его убогий ОРМ обоснованием не является, естественно.
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А кто мешает для простых целей использовать ORM, и для более сложных голый ADO .NET?
Мешает отсутствие смысла в этом случае тащить лишнюю зависимость в проект. Там где нужен простой запрос, нет никаких проблем написать его руками. А там, для чего ОРМы изначально задумывались, для упрощения сложных взаимодействий с БД, они абсолютно бесполезны по другой причине - во первых генерируют крайне неэффективные запросы, а во вторых ограничивают пользователя фантазией разработчика ОРМ. Вот и выходит - в простых случаях ОРМы не нужны, так как проще без них. А в сложных не нужны, так как с ними получается только костыльный говнокод.
0
 Аватар для Andrey-MSK
3368 / 2254 / 388
Регистрация: 14.08.2018
Сообщений: 7,631
Записей в блоге: 4
25.10.2021, 09:23
Цитата Сообщение от Катафалк Посмотреть сообщение
для упрощения сложных взаимодействий с БД,
Не для этого они задумывались, а для упрощения написания рутинного взаимодействия с БД. Это уже потом в них начали пихать всё что надо и не надо
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.10.2021, 15:23
Цитата Сообщение от Катафалк Посмотреть сообщение
Зачем вы пытаетесь увести тему туда, где она уже была и ответ был дан?
Ничего и никуда я не пытался "увести".
Если все Ваши выпады в сторону ORM касаются монстров типа EF, который часто действительно тащит много лишнего, ресурсоемок и вообще неуклюж, то я с Вами не спорю, т.к. согласен. Помню, как выбешивало то, что он наотрез отказывался правильно интерпретировать в классы НД, возвращаемые хранимками и приходилось буквально извращаться в коде SP для того, чтобы он правильно понял, что оттуда выгребается.
Однако в плане "экономичности" кода с учетом того, что далеко не все программисты свободно "разговаривают" на SQL, EF имеет право на жизнь. Хотя, конечно, использовать его нужно с умом.
0
Эксперт .NET
 Аватар для Usaga
14349 / 9443 / 1359
Регистрация: 21.01.2016
Сообщений: 35,592
25.10.2021, 17:06
Цитата Сообщение от Катафалк Посмотреть сообщение
Оттуда, что для работы с БД существует специальное средство, созданное именно для этой цели. SQL называется. Точно так же, как для удаления гланд существует отверстие, гораздо лучше подходящее для этой цели, чем задний проход. Но это лишь подводка к рассуждению. А само рассуждение о том, что ОРМы вредны для большого проекта берется уже из опыта их использования. Также, у кого нет опыта, но есть мозг, тоже может прийти к тому же выводу - надо только этот мозг напрячь чуть чуть. В чем именн там проблемы я опять же уже писал прямым текстом.
Можете локализовать этот вред? В чём он выражается? Так-то, ОРМ и создаются для автоматизации рутинных задач писанины тонны SQL. В грамотных руках они с этим справляются.

Цитата Сообщение от Катафалк Посмотреть сообщение
Как раз наоборот, это отказ от человекочитаемости хранилища должен серьезно обосновываться. То, что вебокодер не может натянуть требования на его убогий ОРМ обоснованием не является, естественно.
Т.е как это отказ от человекочитаемости? Код на том же LINQ существенно короче. Плюс, можно ещё и переиспользовать куски выражений. А что вы мне про динамические запросы расскажите? Они руками тоже более читаемые составляются?)))

Цитата Сообщение от Катафалк Посмотреть сообщение
Там где нужен простой запрос, нет никаких проблем написать его руками.
Только реальные приложения нифига не про простой запрос.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
25.10.2021, 17:13
Цитата Сообщение от Usaga Посмотреть сообщение
Можете локализовать этот вред? В чём он выражается? Так-то, ОРМ и создаются для автоматизации рутинных задач писанины тонны SQL. В грамотных руках они с этим справляются.
Вред от ограничений, налагаемых ОРМом в крупном проекте начисто перекрывает любую пользу от этой автоматизации. В таком проекте по сути 2 пути - или писать страшные костыли для обхода ограничений, или выкинуть ОРМ и работать с базой ручками. В итоге места в крупном проекте, где ОРМ можно с пользой использовать скукоживаются до полного отсутствия, а значит нечего его туда и притаскивать изначально. Вот в этом и выражается.
Цитата Сообщение от Usaga Посмотреть сообщение
Т.е как это отказ от человекочитаемости?
Речь о человекочитаемости храналища. А LINQ ОРМ, следовательно - на помойку И динамические запросы тоже - ручками.
Цитата Сообщение от Usaga Посмотреть сообщение
Только реальные приложения нифига не про простой запрос.
Ага, о том и речь. Там, где ОРМ может быть полезен - он не нужен. А там, где по задумке его создателей нужен - не полезен, а совсем наоборот.
Цитата Сообщение от MsGuns Посмотреть сообщение
Однако в плане "экономичности" кода с учетом того, что далеко не все программисты свободно "разговаривают" на SQL, EF имеет право на жизнь. Хотя, конечно, использовать его нужно с умом.
Такие проблемы решаются повышением квалификации программистом, а не намеренным ухудшением кода. Ну, в нормальном проекте должны решаться. Как решаются в вебне мы видим, в том числе и в этой теме.
0
Эксперт .NET
 Аватар для Usaga
14349 / 9443 / 1359
Регистрация: 21.01.2016
Сообщений: 35,592
25.10.2021, 17:16
Цитата Сообщение от Катафалк Посмотреть сообщение
Вред от ограничений, налагаемых ОРМом в крупном проекте начисто перекрывает любую пользу от этой автоматизации. В таком проекте по сути 2 пути - или писать страшные костыли для обхода ограничений, или выкинуть ОРМ и работать с базой ручками. В итоге места в крупном проекте, где ОРМ можно с пользой использовать скукоживаются до полного отсутствия, а значит нечего его туда и притаскивать изначально. Вот в этом и выражается.
Расскажите мне про ограничения Linq2Db. Они есть, да, но я хотел бы от вас услышать какие именно и на что они влияют.

Цитата Сообщение от Катафалк Посмотреть сообщение
Речь о человекочитаемости храналища. А LINQ ОРМ, следовательно - на помойку И динамические запросы тоже - ручками.
Так эта человекочитаемость улучшается. Это основная цель создания ORM.

Цитата Сообщение от Катафалк Посмотреть сообщение
Ага, о том и речь. Там, где ОРМ может быть полезен - он не нужен. А там, где по задумке его создателей нужен - не полезен, а совсем наоборот.
Пример приведёте?

Цитата Сообщение от Катафалк Посмотреть сообщение
Такие проблемы решаются повышением квалификации программистом, а не намеренным ухудшением кода. Ну, в нормальном проекте должны решаться. Как решаются в вебне мы видим, в том числе и в этой теме.
Где связь между уровнем квалификации и применением ORM?
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
25.10.2021, 17:26
Цитата Сообщение от Usaga Посмотреть сообщение
Расскажите мне про ограничения Linq2Db. Они есть, да, но я хотел бы от вас услышать какие именно и на что они влияют.
Понятия не имею, я этот ваш сишарп с linq2db только на картинках видел Это как раз вам и вопрос, раз вы типа специалист. Вангую, что в любых более менее сложных случаях сгенерированные им запросы можно смело выкинуть в помойку - это в принципе свойство любого ОРМа. Если, конечно, такие запросы на нем в принципе можно написать.
Цитата Сообщение от Usaga Посмотреть сообщение
Так эта человекочитаемость улучшается. Это основная цель создания ORM.
Основная цель создания ОРМа - дать возможность веберам, неспособным осилить SQL, работать с БД. Больше они ни для его непригодны. И уж точно они не имеют никакого отношения к человекочитаемости хранилища.
Цитата Сообщение от Usaga Посмотреть сообщение
Пример приведёте?
Выше в теме объяснено о чем речь, по моему даже 2 раза. Не ленитесь прочитать, на что отвечаете.
Цитата Сообщение от Usaga Посмотреть сообщение
Где связь между уровнем квалификации и применением ORM?
Связь в сообщении, на которое этот комент был ответом. Опять же, читайте, на что отвечаете. А то пустая болтовня по десять раз об одном и том же выходит.
Цитата Сообщение от MsGuns Посмотреть сообщение
Однако в плане "экономичности" кода с учетом того, что далеко не все программисты свободно "разговаривают" на SQL, EF имеет право на жизнь.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
25.10.2021, 17:42
Дискуссия зашла в тупик
Есть большой любитель лошадей, телег и карет. Ну как же, нет нужды в бензине, масле, не нужно никаких СТО и ПДД.
Вот только карет почему-то на дорогах не видно. Как и телег.
Но коневоду на это плевать - ну нравиться ему вдыхать аромат конского навоза А еще ему нравится троллить всех автомобилистов, призывая повально переходить на конную тягу.
0
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
25.10.2021, 18:32  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Дискуссия зашла в тупик
Есть большой любитель лошадей, телег и карет. Ну как же, нет нужды в бензине, масле, не нужно никаких СТО и ПДД.
Вот только карет почему-то на дорогах не видно. Как и телег.
Но коневоду на это плевать - ну нравиться ему вдыхать аромат конского навоза А еще ему нравится троллить всех автомобилистов, призывая повально переходить на конную тягу
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
25.10.2021, 19:08
Цитата Сообщение от MsGuns Посмотреть сообщение
Есть большой любитель лошадей, телег и карет. Ну как же, нет нужды в бензине, масле, не нужно никаких СТО и ПДД.
Это SQL для вас телега?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.10.2021, 19:08
Помогаю со студенческими работами здесь

Enum: Где производится привидение к int и почему нет локальных enum?
1. Если есть enum и где-то в коде доступ к члену массива происходит по приведению переменной enum к int, то это приведение происходит на...

Обобщения, где в качестве параметра enum (класс наследник Enum)
Хочу создать такой класс: public class Example <Y extends Enum> { ... } А потом: enum Ex { a, b, c; } ...

Enum или enum class и где его располагать
Для удобства хочу сделать перечисление уровней через enum. Но запутался, как правильно. Просьба подсказать простым языком. 1. В чём...

typedef enum тэг, или логика работы enum
Можно сказать, что заново открываю для себя C++ :) Полез разбираться с enum. Часто встречаю в исходниках подобный код (пример из MS...

Enum? как к объектам enum дать значения?
Здравствуйте для элементом enum только с помощью конструкторов и set могу дать значения? и еще enum это класс? ]public enum GameLevel { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
55
Ответ Создать тему
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru