Форум программистов, компьютерный форум, киберфорум
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. Показов 6932. Ответов 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
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,620
21.10.2021, 14:00
Студворк — интернет-сервис помощи студентам
Катафалк, вообще, мы тут вполне разобрались. От ТС только выбрать любой из предложеных вариантов решения. Но спасибо вам за очень полезный совет. Обязательно прислушаемся.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
21.10.2021, 15:31
Usaga, и ни один из трех не предполагает отказ от ОРМ. А значит, это не решение проблемы, а укрепление бомбы замедленного действия под проектом. Впрочем, вебокодерам только того и надо, а как бомбанет - можно будет начинать клянчить у заказчика ресурсы на рефакторинг
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
21.10.2021, 15:32
Цитата Сообщение от Катафалк Посмотреть сообщение
Я вижу, как вы тут разбираетесь Продолжаете использовать бессмысленные (а часто вредные) обертки вместо простых и очевидных решений - выкинуть орм и перейти взаимодействие с БД на нормальном SQL
Категоричность - не сестра таланта, скорее злая мачеха.
Все хорошо к месту. В том числе "вредные", как Вы изволили выразиться, ORM.
У ORM есть ряд очень весомых преимуществ. Перечислю только несколько:
- Кроссерверность. Легкость перехода с одного типа/версии SQL-server на другой. В том числе с локалки на сетевой многопользовательский либо наоборот.
- Хорошая автоматическая поддержка транзакций. Не нужно писать кучу кода для комплексных изменений в нескольких таблицах в контексте единой транзакции.
- Легкость и читабельность клиентского кода.
- Инкапсуляция кода в контекстах и/или репозиториях - при изменениях не нужно лазать по всем рабочим кодам приложений.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
21.10.2021, 15:45
Цитата Сообщение от MsGuns Посмотреть сообщение
Кроссерверность. Легкость перехода с одного типа/версии SQL-server на другой. В том числе с локалки на сетевой многопользовательский либо наоборот.
На практике ОРМы ни разу подобную задачу не упрощают, поскольку в проекте сложнее хелоуворлда будут со 100% вероятностью использоваться какие-то БД-специфические возможности. А если не будут - то получится опять же веботормозящая поделка.
Цитата Сообщение от MsGuns Посмотреть сообщение
Хорошая автоматическая поддержка транзакций. Не нужно писать кучу кода для комплексных изменений в нескольких таблицах в контексте единой транзакции.
При этом лишая (или крайне усложняя, до необходимости костыляния) поддержку любых нестандартных, непредусмотренных прямо в используемой ОРМ потребностей. Которые в любом сложном проекте опять же со 100% вероятностью появятся. И это не только о транзакциях, а вообще о чем угодно. Надо какую-то возможность БД применить, про которую ОРМ не знает - будь добр костылить. Надо какой-то нестандратный паттерн применить, про который разработчики ОРМа не подумали, или вообще не знали - будь добр костылить. И т.д. и т.п. В итоге любой более менее сложный проект со временем превращается в нагромождение говнокода, добрая половина которого нужна для обхода огранчений ОРМа.
В начале то проекта все красиво, можно придумать под текущие требования архитекуру, в которую ОРМ идеально ложится, и кажется что ОРМ очень удобная штука. Только в условиях меняющихся и расширяющихся требований удерживать проект в рамках этой архитектуры долго невозможно.
Единственная возможность избежать данных проблем - давить в зародыше любые идеи притащить в проект ОРМ, а тех кто предлагает - отправлять во всем известном направлении.
Цитата Сообщение от MsGuns Посмотреть сообщение
Легкость и читабельность клиентского кода.
Легкость для кого? Для того, что SQL не осилил? Так таких надо гнать из проекта, где используются БД (т.е. практически из любого), а не ОРМы лепить.
Цитата Сообщение от MsGuns Посмотреть сообщение
Инкапсуляция кода в контекстах и/или репозиториях - при изменениях не нужно лазать по всем рабочим кодам приложений.
А к этому ОРМ вообще никакого отношения не имеет, и без него все прекрасно инкапсулируется.
0
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
22.10.2021, 06:53  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Для того, что SQL не осилил? Так таких надо гнать из проекта, где используются БД (т.е. практически из любого), а не ОРМы лепить.
А что реально есть такие разработчики, которые не зная SQL работют с БД? Что-то я сомневаюсь.

Я смотрю вы так часто продвигаете в массы "БЕЗ ОРМ".
Есть ссылка на реальный проект с исходным кодом без ОРМ, чтобы вот как вам нравится? Я обязательно почитаю, и думаю даже прокомментирую ))
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
22.10.2021, 07:22
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Есть ссылка на реальный проект с исходным кодом без ОРМ, чтобы вот как вам нравится? Я обязательно почитаю, и думаю даже прокомментирую ))
Может быть и есть, откуда ж я знаю? Я не настолько опенсорсом интересуюсь, чтобы знать кто из них использует ОРМ, а кто нет
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
А что реально есть такие разработчики, которые не зная SQL работют с БД? Что-то я сомневаюсь.
Сколько угодно. В лучшем случае, умеют написать select * from table_name Да и зря что ли MsGuns, переживает, что код без ОРМ будет сложно читаемым? Вот как раз такими "разработчиками" и будет.
0
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
22.10.2021, 07:38  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Может быть и есть, откуда ж я знаю?
Ясно.
Как про "снежного человека", все слышали, никто не видел )))
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
22.10.2021, 07:47
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Как про "снежного человека", все слышали, никто не видел )))
Вы из тех, кто считает, что закрытого кода не существует?
0
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
22.10.2021, 10:05  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Вы из тех, кто считает, что закрытого кода не существует?
Нет. Это вы из тех, кто говорит как нужно, но предоставить "доказательства" не может.
Со "снежным человеком" я сравнил ваши постоянные подсказки как нельзя делать. Но как можно делать вы можете только говорить, без предоставления каких-либо пруфов.

Очень хочу увидеть проект минимум на 10 таблиц со связями без использования ORM, да ещё и без костылей, и с легкочитаемым, легкорасширяемым кодом ну и бла-бла-бла.

p.s. может так делаете только вы в своём супер красивом, правильном и закрытом от всех коде?

p.p.s. Ну и если всё же кто-то скинет проект без ORM, то я вангую, что этот проект будет ой как похож на ORM, но только самописный под конкретный проект.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
22.10.2021, 10:30
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Со "снежным человеком" я сравнил ваши постоянные подсказки как нельзя делать. Но как можно делать вы можете только говорить, без предоставления каких-либо пруфов.
Пруфы я расписал, если вы не можете из-за недостатка знаний и опыта в сложных проектах их осознать - это не моя проблема. Можете искать ссылки на проекты в открытом доступе, если надеетесь, что это вам как-то поможет. Хотя вряд ли - проблему то можно будет увидеть воочию только наблюдая за проектом в процессе развития. А не глядя на слепок в репе.
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
p.s. может так делаете только вы в своём супер красивом, правильном и закрытом от всех коде?
Разумеется. Не могу ничего сказать о его суперкрасоте и суперправильности - это вообще бессмысленные субъективные выдуманные вебокодерами метрики для выкачивания ресурсов на украшения. Но то, что он гораздо легче поддерживаем и расширяем, чем если бы там был какой угодно ОРМ - это 100%.
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
p.p.s. Ну и если всё же кто-то скинет проект без ORM, то я вангую, что этот проект будет ой как похож на ORM, но только самописный под конкретный проект.
Не исключено. Но в том то и дела, что под конкретный проект, а значит легко расширяем под любые требования, какие в будущем только могут возникнуть. А не ограничен в возможностях кастомизации фантазией его разработчиков.
0
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
22.10.2021, 10:46  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Не исключено. Но в том то и дела, что под конкретный проект, а значит легко расширяем под любые требования, какие в будущем только могут возникнуть. А не ограничен в возможностях кастомизации фантазией его разработчиков.
На сколько мне известно, это называется "изобретать велосипед", при чём каждый раз.

Так недалеко и до полной переписки Net Framework, чтобы под каждый проект, и ничего лишнего.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
22.10.2021, 11:02
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
На сколько мне известно, это называется "изобретать велосипед", при чём каждый раз.
Если все существующие велосипеды с квадратными колесами, рулем с неправильной ориентацией и без сидения, то ничего другого не приходится.
А если серьезно, то перед тем, как тащить в проект любую новую зависимость, нужно подумать - а облегчит ли она нам задачу, или наоборот принесет больше проблем чем пользы. Net Framework в определенных ситуациях попадает в первую категорию. ОРМ же, во всех случаях когда проект сложнее примитивного круда, из категории вредных поделок не выбирается.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,620
24.10.2021, 11:08
Цитата Сообщение от Катафалк Посмотреть сообщение
и ни один из трех не предполагает отказ от ОРМ.
И не должен. Будут конструктивные аргументы в контексте вопроса ТСа?
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
24.10.2021, 12:04
Цитата Сообщение от Usaga Посмотреть сообщение
И не должен. Будут конструктивные аргументы в контексте вопроса ТСа?
"Доктор, я хочу, чтобы вы мне гланды удаляли обязательно через задний проход. Как это не хотите? Будут конструктивные аргументы?"
Вот и здесь единственный конструктивный аргумент заключается в том, что делать надо все по другому. Поскольку гланды через задний проход не позволяет удалять незнакомая пациенту анатомия человека, а использовать ОРМ в серьезных проектах - ущербность этих ОРМов и весь накопленный индустрией опыт их использования, приводящих к абсолютно неподдерживаемому говнокоду.
Так что на вопрос "что сделать с ОРМом, чтобы добиться Х" конструктивный ответ один - выкинуть ОРМ и делать Х без него.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,620
24.10.2021, 14:25
Цитата Сообщение от Катафалк Посмотреть сообщение
Вот и здесь единственный конструктивный аргумент заключается в том, что делать надо все по другому.
То, что тут надо было "по другому" мы и без вас выяснили. Спасибо. Но и то, что в заданной ситуации (кривое решение относительно схемы базы данных) можно просто всё решить мы тоже решили. Не благодаря вам.

Так что ваш высер мимо кассы, ибо ORM тут ничему не мешает.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
24.10.2021, 15:23
"Браво! – вскричал иностранец. – Браво! Вы полностью повторили мысль беспокойного старика Иммануила по этому поводу. Но вот курьез: он начисто разрушил все пять доказательств, а затем, как бы в насмешку над самим собою, соорудил собственное шестое доказательство!" (Булгаков М.А. "Мастер и Маргарита")

Чел отрицает все эти "глюкавые" ORM, но в своих проектах каждый раз сооружает свои собственные
0
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
24.10.2021, 15:50  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Чел отрицает все эти "глюкавые" ORM, но в своих проектах каждый раз сооружает свои собственные
Потому, что у него код идеален. А не то что ваши енти ORM-ы.
У него что ни "Hello World!", то и новые идеальные велосипеды. (неповторяясь, всегда с нуля, в каждом проекте)
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
24.10.2021, 16:15
Цитата Сообщение от Usaga Посмотреть сообщение
Так что ваш высер мимо кассы, ибо ORM тут ничему не мешает.
Совет выкинуть ОРМ из проекта не может быть мимо кассы, точно так же как и совет не удалять гланды через задний проход, если кто-то собирается такое сделать
Цитата Сообщение от MsGuns Посмотреть сообщение
Чел отрицает все эти "глюкавые" ORM, но в своих проектах каждый раз сооружает свои собственные
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Потому, что у него код идеален. А не то что ваши енти ORM-ы.
И тут мы снова видим во всей красе неспособность некоторых понимать русский текст. Где вы нашли у меня эту чушь? Я, конечно, догадываюсь где - но тем забавнее, как вебокодеры видят в моих словах то, что хотят увидеть. А не то, что я на самом деле писал.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
24.10.2021, 16:53
Катафалк, Простой вопрос : что Вы понимаете под "ORM" ?
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
24.10.2021, 17:45
Цитата Сообщение от MsGuns Посмотреть сообщение
Простой вопрос : что Вы понимаете под "ORM" ?
Практически любой инструмент, который пытается делать для работы с БД больше, чем слать запросы на голом SQL и мапить их результаты в объекты по заданным правилам типа "поле в resultset -> поле в объекте". Все, что сложнее, по определению не нужно для работы с БД.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2021, 17:45
Помогаю со студенческими работами здесь

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 { ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
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 появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru