|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|
Архитектура построения БД linq2db06.01.2021, 08:43. Показов 24619. Ответов 111
Добрый день!
У меня вот такая задача. Нужно создать БД CodeFirst на linq2db. (99% что это linq2db). Эту базу будет использовать более 10 мелких приложений. Как сделать правильно, чтобы методы выборки, создания таблици и т.д. были не конкретно в каждом приложении, а вынесены в стороннюю библиотеку? Чтобы при изменении таблицы или выборки, не приходилось менять это во всех 10 приложениях, а только в одном месте. Очень бы хотелось увидеть реальный пример использования. Где посмотреть уже готовые решения на основе linq2db? Не пример использования запросов из справки linq2db, а именно реальную архитектуру построения модели и контроллера. Буду очень благодарен за любую помощь!
0
|
|
| 06.01.2021, 08:43 | |
|
Ответы с готовыми решениями:
111
В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников Как ускорить запрос Linq2db? |
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|
| 06.01.2021, 09:17 | |
|
BeginnerCoderCS, архитектура приложения использующего эту ORM ничем не отличается от архитектуры приложений с любой другой ORM. Поэтому за пример можете взять любое приложение.
Как правило, весь код по работе с СУБД выносится в отдельную сборку, которую можно переиспользовать. Про создание таблиц я не понял, что имелось в виду. У Linq2Db нет механизма миграций. Да и почему приложение должно себе схему базы создавать. Оно должно работать с существующей.
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||
| 06.01.2021, 09:54 [ТС] | ||||
|
То есть метод создания таблицы (со всеми свзями и индексами) должен быть доступен из любого приложения. Но это всё я сделаю и сам. Меня больше интересует само взаимодействие приложения с моделью БД.
0
|
||||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
||
| 06.01.2021, 10:25 | ||
|
BeginnerCoderCS, ссылку дать не могу. Можете поискать примеры "трёхзвенной архитектуры" и паттерна "репозиторий". Примеры с Entity Framework не будут отличаться от примеров с Linq2Db в плане архитектуры проекта. Поэтому можете смело их использовать. Единственное, что Linq2Db не имеет на борту Change Tracker'a что хорошо. Поэтому Unit of Work, на примеры которого вы тоже можете наткнуться, с ним не сочетаются.
1
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
|||||||||||||||||||||||||||||||
| 06.01.2021, 10:41 [ТС] | |||||||||||||||||||||||||||||||
|
Usaga, сейчас покажу код, который у меня на текущий момент. (linq2db)
Но мне не нравится, что приходится дублировать методы в каждый класс. При создании новой таблицы, приходится копировать метод Insert, Update и менять только входные параметры метода. Пока было штук 5 таблиц, всё устраивало, а вот при увеличении, а их будет не меньше 30, это уже хардкор. Я понимаю что что-то не так, а вот как сделать, чтобы было так не могу придумать (( Модель
Connection
Методы для каждой таблици в отдельном классе
Объединение Таблиц для удобности вызова из приложения
Объеднение Таблиц
Использование в отдельном приложении
0
|
|||||||||||||||||||||||||||||||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|
| 06.01.2021, 11:23 | |
|
BeginnerCoderCS, зачем нужны классы Table1Connection и Table2Connection? Да и DbUnion тоже что-то лишнее.
Для работы достаточно только MyConnection и всё. Не воротите лишние классы. И ID руками тоже задавать не надо. СУБД их самостоятельно генерирует, безопасным образом.
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 06.01.2021, 11:57 [ТС] | ||
|
То есть нужно создать разные методы для создания почти всех таблиц. (Создание таблиц из кода обязательно) Эти методы нужно делать тоже в классе MyConnection? Все в одном классе? p.s. Я самоучка. Это к тому, если вам кажется, что я задаю очень глупые вопросы. Может это очевидные вещи, но я наверное ещё на них не натыкался или не понял как они работают.
0
|
||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|
| 06.01.2021, 13:54 | |
|
BeginnerCoderCS, мне кажется, что вы мутное что-то делаете) Если вы берете linq2db, то получается, что схема базы данных известна заранее. Почему базу нельзя руками собрать заранее, в sqlite browser и просто положить в проект? Это же будет быстрее и проще, чем писать код
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 06.01.2021, 18:45 [ТС] | ||
|
И проекты заказные. У меня нет доступа ни к данным, которые там будут, ни к OS на которых это будет работать. Вот поэтому и нужно, чтобы при запуске, проверялись таблицы и создавались в случае их отсутствия. Нужно чтобы со стороны заказчика (пользователя) не нужно было никаких танцев с бубном. Чтобы он запустил приложение и оно работало, а не кидало ошибки, что нет таблицы и т.д. Но может конечно и здесь я создаю велосипед.
0
|
||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|
| 07.01.2021, 08:58 | |
|
BeginnerCoderCS, в таком случае, можно написать один запрос к базе, который при запуске выполнится. В этом запросе вы будете проверять наличие нужных таблиц и создавать их. Для этого не надо писать N отдельных методов вида CreateTable для каждой таблицы.
И надо понимать, что такой запрос будет в двух вариантах, ибо диалект языка запросов у этих СУБД различается. И ещё надо понимать, что SQLite куда проще, чем MySQL, что в поддерживаемых типах, что в возможностях языка. Поэтому можно наткнуться на ситуацию, когда Linq2Db не сможет на SQLite выполнить сложный запрос, который легко выполняется на MySQL. И третий момент: в случае с MySQL приложение должно иметь полный доступ к СУБД, с правами админа. Иначе оно не сможет изменять схему. А это трындец как небезопасно. Просто огроменная дырень в безопасности. Тут правильнее одно из двух: или приложение должно ставиться инсталлятором, которому такие права предоставят, но он отрабатывает один раз, или пользователю даётся файл SQL-скрипта, который он сам выполнит в СУБД и получит схему базы, а ваше приложение будет работать с обычным уровнем привилегий.
1
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||
| 08.01.2021, 12:00 [ТС] | ||||
|
Или я так и не понимаю как работает linq2db? Тогда клиенту нужно постоянно передавать SQL-скрипт и научить его этим заниматься? Но ему это не нужно. Он просто хочет чтобы всё работало. Или как это делать правильно?
0
|
||||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|||
| 08.01.2021, 12:13 | |||
|
Я в вашем примере кода видел два класса, явно каждый под свою таблицу. В каждом видел метод CreateTable. И своей фразой выше я имел в виду, что это не нужно. Просто не нужно. Достаточно одного SQL-скрипта (который из кода можно выполнить), не привязанного ни к какой таблице, который пройдётся по базе и проверит наличие всех таблиц. А лучше, какой-то одной потому, что вряд ли кто-то будет специально ходить и выборочно таблицы из базы удалять. Если одной проверяемой таблицы нет, то делаем вывод, что и всех остальных нет и всю базу нужно создавать. Если проверяемая таблица есть, то делаем вывод, что вся база создана. Всё.
0
|
|||
|
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
|
|
| 08.01.2021, 12:42 | |
|
BeginnerCoderCS,
..а вы не думали о том, что может быть в вашем варианте, если уж пользователь не хочет запускать инсталлятор обновления/добавления, то есть смысл пересмотреть архитектуру БД и не плодить таблицы при каждом чихе, а создать, например, мастер-таблицу сущностей, а данные этих сущностей хранить в уже существующих таблицах, разделяя их по Id ... тогда и не нужно будет добавлять таблицы и создавать новые связи? ...
0
|
|
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|
| 08.01.2021, 12:49 | |
|
carrotik, это какое-то странное решение. Которое, к тому же, вызовет сложности в работе и использовании тех же ORM. Надёжнее и проще явно схему базы изменять. Не вижу профитов от такого решения с мастер-таблицей.
0
|
|
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||||||
| 08.01.2021, 12:54 [ТС] | ||||||||||||
|
Для примера. Есть 3 таблицы. SQL запросы создания таблиц
C# Классы
0
|
||||||||||||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
||
| 08.01.2021, 13:12 | ||
|
Добавлено через 5 минут Более того: Linq2Db не обязан знать о таких связах. Вы можете в запросах вручную JOIN'ы делать, если надо, по любым критериям, а не только по связке Внешний Ключ - ID.
0
|
||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||
| 08.01.2021, 13:14 [ТС] | ||
|
Хоть одну связь покажите на реальном примере пожалуйста
0
|
||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
||||||
| 08.01.2021, 13:29 | ||||||
|
BeginnerCoderCS,
Причём в County тоже можно связь прописать к множеству городов. Т.е. этот атрибут поддерживает как один-к-одному, так и один-ко-многим с обоих сторон.
1
|
||||||
|
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
|
||||||||||||
| 09.01.2021, 00:25 [ТС] | ||||||||||||
При создании таблицы foreign key не создаётся. Это ладно, буду создавать отдельно. Insert вот так работает хоть с Association, хоть вообще без Association.
Что я всё время делаю не так? Скачал полностью с github все исходники, загрузилось миллион зависимостей, в том числе net sdk всех версий, и в итоге 751 ошибка в коде. Пока пользовался этим linq2db на примитивном уровне было всё норм, а как что-то серьёзнее, то вообще не отстрелю что с ним делать. Я на столько расстроен, что мне эго уже говорит, что это не я туплю, это оно так и работает.
0
|
||||||||||||
|
14090 / 9308 / 1348
Регистрация: 21.01.2016
Сообщений: 34,956
|
|||||||||||||
| 09.01.2021, 08:36 | |||||||||||||
Добавлено через 3 минуты SELECT * FROM, когда вам всего одно поле нужно?Добавлено через 28 минут
1
|
|||||||||||||
| 09.01.2021, 08:36 | |
|
Помогаю со студенческими работами здесь
20
Linq2db как изменить имя таблицы? Запрос linq2db c условием разницы времени
Как сохранить изменения сделанные в DataGridView в БД при использовании linq2db?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|