|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
Архитектура построения БД linq2db06.01.2021, 08:43. Показов 25729. Ответов 111
Добрый день!
У меня вот такая задача. Нужно создать БД CodeFirst на linq2db. (99% что это linq2db). Эту базу будет использовать более 10 мелких приложений. Как сделать правильно, чтобы методы выборки, создания таблици и т.д. были не конкретно в каждом приложении, а вынесены в стороннюю библиотеку? Чтобы при изменении таблицы или выборки, не приходилось менять это во всех 10 приложениях, а только в одном месте. Очень бы хотелось увидеть реальный пример использования. Где посмотреть уже готовые решения на основе linq2db? Не пример использования запросов из справки linq2db, а именно реальную архитектуру построения модели и контроллера. Буду очень благодарен за любую помощь!
0
|
|
| 06.01.2021, 08:43 | |
|
Ответы с готовыми решениями:
111
В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников Как ускорить запрос Linq2db? |
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 22.01.2021, 09:34 | |
|
1
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 22.01.2021, 10:06 [ТС] | ||
|
И у нас была таблица `table1` с уникальным индексом поля `Name` который создаётся на апдейте 5. А через 20 апдейтов, мы удалили этот индекс. То есть при проверке на 5 шаге будет попытка создания индекса, хотя на 25 шаге он (индекс) опять удалится? Или как в этих случаях быть? Или таблица с sql запросами других таблиц, тоже постоянно изменяется? а не только дополняется?
0
|
||
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
||
| 22.01.2021, 10:25 | ||
|
В таблице сохраняем названия операций над базой. Каждая операция проверяет наличие своего названия в этой таблице. Если названия нет, то действие выполняется и название вносится в таблицу. Если название уже есть, то операция не выполняется. Т.е. мы храним в этой таблице историю изменений. В таком случае ваш пример с индексом будет работать корректно: каждое действие выполнится только один раз. Добавлено через 16 минут Ну или вместо названия может быть просто номер версии базы. Или дата релиза. Тут уж как вам удобнее.
1
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
| 22.01.2021, 10:55 [ТС] | |
|
0
|
|
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 22.01.2021, 10:56 | |
|
BeginnerCoderCS, блин) Храним название операции. Строку. С текстом. Не SQL-запрос.
0
|
|
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 22.01.2021, 11:00 | |
Сообщение было отмечено BeginnerCoderCS как решение
Решение
1
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 26.01.2021, 08:56 [ТС] | ||
|
FluentMigrator в примерах только 3 версия, а в ней зависимостей просто ужас. А со второй (v2.0.7) что-то не нахожу примеров, чтобы запускать ни с бат файла, а из кода (( А DotNetProjects.Migrator почему-то так мало установок в Nuget что страшно в продакшн ставить.
0
|
||
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 26.01.2021, 08:57 | |
|
BeginnerCoderCS, зачем вам эти библиотеки? Ожидаете, что они за вас всё сами сделают?)
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 26.01.2021, 09:02 [ТС] | ||
|
Хочется положиться на опыт других разработчиков. Ну и не изобретать велосипед. Подход не верен?
0
|
||
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 26.01.2021, 09:06 | |
|
BeginnerCoderCS, если хотите, то попробуйте прикрутить эти библиотеки. Я в них смысла не вижу вообще никакого.
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||||||||||
| 09.02.2021, 22:18 [ТС] | ||||||||||||||||
|
Доброго всем!!!
Вопрос всё так же касается архитектуры linq2db так что не буду создавать новую ветку. Тут вот такое дело. Чтобы пользоваться полноценным enum mysql. То есть чтобы тип enum был и в базе MySQL и в коде C#. Нужно в enum C# добавлять атрибуты [MapValue(Value = "значение")]
Так вот в чём вопрос. Основная масса enum-ов у меня уже есть в модели JSON API сервиса. Не очень хочется дублировать эти enum-ы из модели JOSN в модель DataBase. Не будет ли конфликтов, если я добавлю в модель JSON (Newtonsoft.Json) нужные мне атрибуты для linq2db, при условии что там могут быть атрибуты от самого (Newtonsoft.Json). Допустим почти все enum-ы json у меня с атрибутом
Так же с радостью посмотрю другие варианты использования. Добавлено через 2 часа 32 минуты Может быть есть возможность не указывать [MapValue(Value = "Unknown")] в enum-ах, а прописать это в свойство?
0
|
||||||||||||||||
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 10.02.2021, 04:47 | |
|
BeginnerCoderCS, enum'ы не обязательно должны проецироваться на enum'ы в СУБД. Можно в базе использовать обычный CHECK CONSTRAINT или даже внешний ключ на таблицу статического справочника. Тогда в enum'e в коде никакие атрибуты не будут нужны.
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
| 10.02.2021, 08:19 [ТС] | |
|
Usaga, с внешним ключом при добавлении добавляет запросы.
На примере City. Нужно добавить строку в City. Но чтобы добавить нужно получить CountryId, а чтобы получить CountryId, нужно проверить есть ли вообще такой CountryName в таблице, и если нету, то добавить, и только потом получить CountryId. Вот я и подумал, почему бы не использовать enum-ы которые уже есть. Это уменьшит количество запросов к БД (особенно при INSERT), ну и сам enum в MySQL хранит 1байт. Я не пытаюсь всё перевести на enum-ы но есть enum-ы в которых 4 фиксированных значения, и пятое вряд ли когда появится. Зачем отдельная таблица для этого?
0
|
|
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|||
| 10.02.2021, 08:27 | |||
|
Добавлено через 2 минуты
0
|
|||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||||||||||||||||||
| 10.02.2021, 08:46 [ТС] | |||||||||||||||||||||||
Нужно получить CountryId
С enum-ом всё проще, и выборки, и insert-ы. Или что я опять упускаю? Есть возможность как-то проще работать с внешними ключами?
0
|
|||||||||||||||||||||||
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 10.02.2021, 08:50 | |
|
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
| 10.02.2021, 08:52 [ТС] | |
|
0
|
|
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
|
| 10.02.2021, 08:57 | |
|
BeginnerCoderCS, я понял. Чтобы мой совет работал (с внешним ключом) вам нужно завести в базе таблицу статического справочника стран. В этом справочнике ID записей будет соответствовать значению перечисления в коде. Тогда никуда за ID страны лезть не нужно будет, ибо вы все ID стран знать будете в коде.
Второй вариант - просто целочисленное поле CountryId, без ограничения ключа. Или с ограничением вида CHECK CONSTRAINT. Вариант с трансляцией значений enum'а в строки нарушает нормальную форму данных в базе и очень нежелателен.
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||||||
| 10.02.2021, 09:38 [ТС] | |||||||||||
|
Usaga, то есть вы предлагаете отказаться от использования enum в MySQL вообще?
Представим что нам нужно всего 3 страны. Может быть когда-то понадобятся остальные, а может и нет. Но сейчас их 3. Вместо вот этого
Честно скажу, что-то я не пойму, чем плох enum в базе? Почему ним не пользоваться? Тем более, что наглядно в таблице видим не ссылку а само значение.
0
|
|||||||||||
|
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
|
||
| 10.02.2021, 09:51 | ||
|
Ваша исходная проблема какая была? В том, что нужно аннотировать все перечисления, чтобы они на строки (и обратно) проецировались в таблице. Я озвучил варианты решения проблемы, более корректные. Вы вольны не прислушиваться к этому. Если вы всё равно руками в СУБД названия стран прописываете, то почему бы тогда не завести статический справочник? Это снимет необходимость как в аннотировании enum'ов так и нормализует данные в базе. И никаких дополнительных запросов для определения страны не понадобится, ибо значения (числовые) enum'ов есть ID соответствующих записей в таблице стран.
1
|
||
| 10.02.2021, 09:51 | |
|
Linq2db как изменить имя таблицы? Запрос linq2db c условием разницы времени
Как сохранить изменения сделанные в DataGridView в БД при использовании linq2db?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|