|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
MS SQL База данных для решения Картотека01.10.2020, 12:25. Показов 4309. Ответов 53
В разделе WPF я создал тему для реализации работы "Картотеки"
Картотека MVVM В этой же теме я хочу создать базу данных с использованием EntityFramework и MSSQL. Информацию, периодически, буду обновлять на GitHub: https://github.com/limeniye/PatientArchive
0
|
|
| 01.10.2020, 12:25 | |
|
Ответы с готовыми решениями:
53
База данных в программе: какие пути решения? База картотека абонентов атс Разработка базы данных «Картотека закупок». |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||
| 02.10.2020, 15:20 | |||
|
Не по теме:
Знаете, есть один универсальный способ без минусов - ничего не делать вообще ! Добавлено через 36 минут Добавлено через 2 минуты Чем отличается строчка вызова метода репозитория от строчки вызова метода контекста Модели (SP) ? Ну, кроме, конечно, компактно передаваемых параметров
0
|
|||
|
14583 / 9489 / 1361
Регистрация: 21.01.2016
Сообщений: 35,787
|
|||
| 02.10.2020, 15:53 | |||
0
|
|||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||||
| 02.10.2020, 17:09 | ||||||
|
Вот свежий пример. Участвовал в проекте со страницей, где нужна была пагинация ибо данных было ну очень много - десятки тысяч строк. Сделал ее в репозитории - сетка листалась по нескольку секунд. Переделал на SP с выборкой нужного номера листа (а там всего пару десятков строк в листе), сетка стала листаться мгновенно. В первом случае - репозитрий, во втором - просто контекст Модели. Работа напрямую с SQL имеет ряд недостатков. 1. Громоздкий трудно читаемый код 2. Куча всяких ридеров, коммандов и коннектов 3. Возня с параметрами 4. Затруднительная отладка, т.к. приходится ловить запрос всякими бубнами и плясками чтобы увидеть собственно ошибку 5. Явные преобразования к типам Модели, что тоже загромождает код немало. 6. Наконец, надо просто знать этот самый SQL А какой собственно ORM: даппер, маппер и сраппер - по барабану ![]() Добавлено через 18 минут Вот почему я использую EF ? Во-первых я работаю всегда Database First, т.к. мне проще, понятнее и привычнее мостить БД в каком-нибудь SQL-клиенте - ну знаю я SQL в нужном мне объеме. А не знаю чего-то, - у меня есть всезнающий гугль. Намного проще и заливать в базу и данные из каких-нибудь экселей, текстовиков и даже дбф - не надо париться с трудно постижимой системой миграции, подстраиваться под ее "капризы". Во-вторых, есть ТЗ на проект, есть требования к отображению данных. Из них легко определяется состав информации и ее источники. Пристегиваю EDM, выбираю нужные сущности из базы. Если чего-то не хватает - бегом на SQL Server и там по быстрячку сооружается нужная UDF/SP, после чего добавляется в модель. Получаю (заметьте, безо всякого "кодинга") Модель, которая адекватно представляет нужную информацию БД. Далее эту Модель я получаю к методе контроллера одной строкой из контекста Модели (или репозитория если он есть) и тут же сую ее в представление, протипизированное по соответствующему классу модели. В контроллере - это все. В представлении пробегаюсь по датасету Модели или беру линейные данные из нее же и сую их в разметку. Далее немного колдовства, никак не связанного ни с Моделью, ни вообще ни с каким ОРМ и даже БД, и страничка у меня оживает - сетки слушаются клавиш, все красится в нужный цвет, все подкачивается как надо. В общем - красота ! Добавлено через 8 минут С внесением изменений та же история с географией. Получаю в каком-нибудь HttpPost методе модель с заполненными юзером полями и просто перечисляю эти поля в параметрах вызываемого контекстного метода. Даже не заморачиваюсь с серверной валидацией - просто вызов метода обкладываю try и ловлю исключение, присланное самим SQL-сервером, которое и дублирую в окошке странички 3-4 строки кода - и все.
0
|
||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||||||||||||||||||||||||||||||||||
| 02.10.2020, 17:18 [ТС] | |||||||||||||||||||||||||||||||||||||||||
|
MsGuns, Usaga, тут у меня вопрос назрел.
Я хочу сделать всё code-first и у меня есть 4 Dto класса Кликните здесь для просмотра всего текста
Как я понимаю, мне нельзя их использовать для создания таблиц, потому что это не совсем те классы, которые нужны. Как я себе это представляю? Мне кажется, должны быть отдельно Dto-классы и отдельно классы-сериализаторы, или как ещё это назвать. Ну, что-то типо такого:
0
|
|||||||||||||||||||||||||||||||||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 02.10.2020, 18:43 | |
|
Ух, наворотил !
Gender - это пол ? М/Ж ? Зачем для этого класс, а тем более таблица ? History - это записи посещений с диагнозами, манипуляциями, назначенными лечениями и т.д. Ну типа карточки пациента ? Patient - это собственно больной ? Если очень упрощенно, т.е. без уточнений типа справочник болезней, справочник лекарственных препаратов и т.д. надо всего две таблицы: 1. Таблица пациентов: ФИО, пол (м/ж), адрес, контактный телефон 2. Таблица визитов: Дата, жалобы (все в строку), диагноз (все в строку), проведенные/назначенные лечебные процедуры (строка), назначенные препараты (таблетки) (строка) Таблица визитов связана с таблицей пациентов отношением "много-к-одному". Все. Какая тут "сериализация" - хз. Добавлено через 12 минут Code First - это метод для "продвинутых" разрабов, что бы там не писали в ненаучно-непопулярной литературе. Для того, чтобы работать в этой манере, т.е. по сути вслепую, наощупь, надо иметь опыт и навыки. И опять же хотя бы элементарные понятии о базовой теории СУБД. У Вас, похоже, нет ни того, ни другого, ни третьего. Пишущий Code First должен четко себе представлять, как интерпретируется на физической базе каждая строка его классов-таблиц. Чтобы потом не получилось "Сделал хотел утюг, слон получился вдруг" (с) Если непременно хочется освоить эту технику, то вот совет - начните с Model First, где в режиме конструктора будет возможность визуально построить сущности и соорудить связи между ними. Потом посмотреть на сгенерированный автоматически код. Внимательно его проанализировать и понять. И так раз 10. На разных базах. И только усвоив как код классов и методов "ложится" на БД SQL-сервера, в какие сущности бизнес-логики он "превращается", пытаться перейти на "голое" программирование. Т.е. Code First Если у Вас EF Core (насколько мне известно, в коре только Code First), не поленитесь создать тестовый проект с EF более ранней версии. А научившись, вернетесь опять к коре.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 02.10.2020, 19:08 [ТС] | |
|
MsGuns, хорошо, если Gender не таблица, то как мне котролировать пол? Явно же не string использовать.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 02.10.2020, 19:25 | ||
|
Главное - это разделять их. В базе можно определить как int, а в интерфейсе либо чекбоксом либо радио либо комбобоксом с двумя значениями (М и Ж) При записи в БД подеменять М на 1, Ж - на 0. Кстати, а чем string не угодил-то ? Вполне себе вариант.
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 02.10.2020, 19:30 [ТС] | |
|
MsGuns, хм, хорошо. Попробую сделать.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 02.10.2020, 19:49 | |
|
При проектировании БД и анализе предметной области важно сразу правильно квалифицировать объекты на "сущности" и "атрибуты".
Например, объект является "сущностью", т.к. он содержит "атрибуты". Каждый "студент" имеет атрибуты "Фамилия", "Имя", "Отчество", "Пол", "Принадлежность к группе", "Контактный телефон", "Адрес". При этом очевидно, что лишь один из атрибутов не просто атрибут, а ссылается на другую "сущность" - группу. Все же остальные являются "простыми" атрибутами. "Пол" тоже относится к "простым" поскольку не может принимать более двух конкретных значений. Теперь добавим к студенту еще один свойство - атрибут "Характер". А вот тут заминка. Хоть объект "Характер" и является атрибутом, но сам по себе может быть "сущностью". Которая к тому же может динамически меняться сама по себе. Поясню: известны например характеры "сангвиник", "холерик", "меланхолик" и т.д. Но надо вдруг добавить к этому списку новый характер. Допустим, "перманентный лодырь". Т.е. сам характер существует как бы сам по себе. Вполне может оказаться, что среди всех студентов нет ни одного "лодыря". Но сущность от этого не становится лишней и ее надо бы добавить в БД. Вот для такого случая и добавляется в БД таблица-сущность для хранения всех возможных характеров. А в соответствующем атрибуте сущности "Студент" место самого определения характера займет ссылка на Справочник Характеров. При выборке списка студентов в запросе будет вместо ссылочного Id будет стоять наименование характера, которая извлечется из связанной join таблицей "Справочник характеров". Когда будет писаться редактирование, то вместо TextBox напротив атрибута "Характер" нарисуется ComboBox со всеми вариантами, взятыми из таблицы-справочника "Характеры". А после выбора нужного в таблицу студентов будет помещен id выбранного характера.
1
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,236
|
||||||
| 02.10.2020, 21:58 | ||||||
|
Ну при CodeFirst очень удобно зашивать простые данные справочников в отдельные таблицы.
Типа того:
А в таблице пациента FK на справочник. Чистая и понятная модель данных, а не эти туалетные "М" и "Ж". ![]() Добавлено через 1 минуту И бонусом - никогда не надо будет лазить в базу, чтобы получить PK значения из базы, так как значение справочника уже зашито в enum-е.
2
|
||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 02.10.2020, 22:32 [ТС] | |
|
IamRain, вот, я это и хотел услышать. Спасибо!
0
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,236
|
|
| 02.10.2020, 22:42 | |
|
limeniye, да пожалуйста.
PS: только description-ы надо поменять местами.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 02.10.2020, 23:00 [ТС] | |
|
Хах, точно.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 03.10.2020, 22:41 | ||
![]() Использовать enum, конечно, можно. Для двух вариантов. Никогда не меняемых. И плюс целый класс в 6 строчек кода. Глядя в ссылки на который случайно забредший в проект кодер будет гадать, а что же там за енум такой - может там есть и бесполые, и трехполые ? Хотя, безусловно, у каждого свои вкусы. Добавлено через 2 минуты И, кстати, как Вы предполагаете хранить Ваш енум на сервере - просто интересненько ? Еще надцать строк кода для тудой-сюдой ?
0
|
||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,236
|
||||
| 04.10.2020, 10:22 | ||||
|
Я не говорю, что у вас плохое решение, такое очень часто используется, есть и варианты где все справочники в одной таблице с полем-дисриминатором в одной таблице, как винегрет. И такое работает. Я лишь хочу сказать, что в таком решении не очень хорошо "рюшечки разложены по полочкам"
1
|
||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||
| 04.10.2020, 13:42 | ||||
0
|
||||
|
14583 / 9489 / 1361
Регистрация: 21.01.2016
Сообщений: 35,787
|
||||
| 05.10.2020, 10:33 | ||||
|
Добавлено через 6 минут
0
|
||||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,236
|
|||||||
| 05.10.2020, 14:32 | |||||||
|
Как вариант, можно найти в базе запись из __MigrationHistory и удалить ее. Затем снова запустить ef database update. Автоматом добавятся новые значения. Зато какой профит - чистая модель данных. И не надо лазить в БД от слова вообще никогда, если нужны значения справочника. Типа того:
И пусть в базе будет хоть 200 таблиц-справочников, в каждой из которых всего по 10 значений - ничего страшного, СУБД от этого не умрет. Все что нас интересует - это чистая модель данных и чистая объектная модель.
0
|
|||||||
|
14583 / 9489 / 1361
Регистрация: 21.01.2016
Сообщений: 35,787
|
||
| 05.10.2020, 14:34 | ||
|
1
|
||
| 05.10.2020, 14:34 | |
|
База данных для телефонной станции ( С условием сортировки данных )
Как правильно спроектировать база данных для Учет товаров для маленький фирмы Готовая база данных для 8.2 База данных для теста Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|