|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|||||||||||||||||||||
Связь 1:1 между несколькими таблицами Entity Framework18.02.2020, 20:48. Показов 3213. Ответов 13
Есть недвижимость 3-х типов земельные участки, квартиры и дома хочу внести адресные данные в общую таблицу и остальные по соответствующим (См. вложение №1). Вопрос как сделать связи в Entity Framework правильно ибо у меня выходит ошибка при миграции (См вложение №2). Сущности описаны ниже.
0
|
|||||||||||||||||||||
| 18.02.2020, 20:48 | |
|
Ответы с готовыми решениями:
13
Entity Framework. Связь между таблицами один ко многим В чем разница между Entity Framework и Entity Framework Core? Entity Framework. Связь 1 к 1 |
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
|
| 19.02.2020, 04:16 | |
|
Гречка, во-первых, один-к-одному это про две сущности: одна слева, вторая справа. А вы что хотите? Правильно, четыре сущности. Это уже один-ко-многим. Во-вторых, вы накорячили наследование бредовое: Инфорация о Доме по вашей модели является Адресом недвижимости. Не ерунда ли?)
Все три ваши сущности должны ссылаться на Адрес. Т.е. связь один-ко-многим. То, что Дом, Земельный участок и Квартира могут ссылаться на один и тот же адрес - естественное положение дел, как девятиэтажка по улице Ленина, 90, где все квартиры тоже находятся на улице Ленина, 90.
0
|
|
|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|
| 19.02.2020, 05:38 [ТС] | |
|
Как раз таки наоборот на один адрес не может ссылаться несколько квартир. В классе RealEstateAddress видно что под адресом подразумевается город улица дом квартира и все эти поля не обязательные. И если руководствоваться вашей логикой как риэтеру ориентироваться такой базой? Покажешь сегодня 2 квартиры и обе они находятся на Ленина 90, а квартиру сам найдешь.
0
|
|
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
||||||
| 19.02.2020, 06:46 | ||||||
|
Гречка, ну ОК. Тогда просто ссылайтесь на адрес напрямую из каждой сущности. Уникальность использования адреса можно гарантировать одним из двух способов:
* В коде, при связывании сущности с адресом проверять не задействован ли адрес ещё где; * В схеме базы данных, введя таблицу-связь вида
Я бы рекомендовал первый вариант, ибо проще, хоть и менее надёжен.
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|
| 19.02.2020, 07:01 [ТС] | |
|
Вы предлагаете создать таблицу запросом. А я хочу чтобы Entity fraemwork создавал таблицы и связи с помощью кода на C#. Как сделано в видео на ютубе(видео идет 2 часа https://youtu.be/XHuUN1u8ZPE). Только вот проблема то в том что в видео говорится как сделать связь 1:1 между 2 таблицами а у меня их 4.
Измененно: писал автору видео о такой проблеме он посоветовал сделать класс RealEstateAddress абстрактным и чтобы вторичные таблицы наследовали его. Но это мне не помогло и я теперь здесь
0
|
|
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
|||
| 19.02.2020, 07:05 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|
| 19.02.2020, 07:17 [ТС] | |
|
Вы говорите что больше 2 таблиц 1:1 я не создам но я это могу спокойно сделать в MS Server. Только мне надо чтобы конечного пользователя не волновало какая там структура данных в бд. Поэтому хочу чтобы если данной структуры не было в бд его создавала программа. И сразу предвижу возражения мол сделай запросы в коде и отправляй в бд. Хочу уметь создавать структуры в бд не только с помощью запросов.
0
|
|
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
||
| 19.02.2020, 07:22 | ||
|
И SQL Server тут ни причём. Схема базы должна и будет парить именно вас, как разработчика. Конечный пользователь тут тоже ни причём. Создадите схему руками или силами EF'а сгенерируете, она всё равно будет неизбежно. Более того: она не обязана быть строго такой, какой описана в EF. Я вам предлагаю только идею организации этой схемы. Ещё раз: как вы эту схему породите - не играет никакой роли. Будут сущсности, будут связи между ними. С EF'ом или без него.
0
|
||
|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|
| 19.02.2020, 07:42 [ТС] | |
|
Я понял вашу идею (создать доп. Таблицу асоциации) но разделением одной таблицы на 4 я стремился избавиться от тех столбцов которые не нужны в конкретных записях (что я имею ввиду была изначально одна таблица со всеми данными и ясно что для земельного участка никто указывать количество комнат не будет и т п). Вы предлагаете создать еще одну таблицу когда в одной записи будет храниться id таблицы адреса и id одной из трех типов недвижимости тем самым снова порождая пустые столбцы (из за подобной структуры). Что меня откровенно говоря не устраивает. Если я не правильно вас понял будьте добры объяснить. И вопрос состоит в том как через EF создать структуру описаной мной в начале.
0
|
|
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
||||||
| 19.02.2020, 07:57 | ||||||
|
Гречка, нет, вы правильно поняли. На самом деле можно сделать вариант таблицы-связи и без пустых полей, с полиморфным внешним ключом на любое количество таблиц. Но тогда СУБД не сможет гарантировать целостность такого ключа, ибо не будет знать на что ключ указывает. Идея такая:
Может статься, что вам проще адрес хранить в каждой сущности. Может быть используя Table Splitting (EF это умеет из коробки, погуглите). Ну или одна таблица адрес, на которую кто угодно может ссылаться. В конце концов, вы реально видите такую лютую проблему в том, что у некоторых записей будут пустые поля? Вы же базу не на дискете хранить собрались, где каждый байт важен? А вот сложностей вы себе обеспечите совершенно точно)
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|
| 19.02.2020, 09:05 [ТС] | |
|
Да, я думал после возникновении этой проблемы, что можно создать одну таблицу и потом разбить тем самым Table Splitting. И к тому же не кажется что это костыль? Но чем больше я искал решения данной проблемы тем больше мне становится интересно почему я не могу сразу создать подобную структуру? Я хочу разобраться в этой ситуации.
И разбиваю не потому что на дискетах хранить данные буду. А по двум причинам: 1) при поиске недвижимости по адресу меньше данных за собой волочить буду при такой структуре что в целом плюс 2) я участвую в world skills и за такую структуру в 3 раза больше баллов начисляют чем нежели я хранил все данные в одной таблице.
0
|
|
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
||||
| 19.02.2020, 09:49 | ||||
|
0
|
||||
|
0 / 0 / 0
Регистрация: 13.09.2018
Сообщений: 11
|
|||
| 19.02.2020, 10:15 [ТС] | |||
. так что эта причина отпадает.И в таком случае все равно не понятно почему я не могу создать такую структуру сразу в EF
0
|
|||
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,344
|
|||
| 19.02.2020, 10:40 | |||
|
0
|
|||
| 19.02.2020, 10:40 | |
|
Помогаю со студенческими работами здесь
14
Связь многие-ко-многим в Entity Framework Entity Framework - связь через интерфейсы Связь многие ко многим (Entity Framework) Entity Framework и связь одной таблицы со многими Отношение между несколькими таблицами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|