|
4 / 4 / 1
Регистрация: 16.06.2016
Сообщений: 21
|
|||||||||||||||||||||||||||||||
MS SQL Ошибка цикличности модели БД20.12.2017, 18:31. Показов 1743. Ответов 12
Метки entity framework (Все метки)
Огромная просьба не кидать мне в ответах ссылки на похожие темы и теорию.
Меня просто застопорило и я что-то не могу понять где проблема (где зациклило) Вот кусочек моей БД, созданной по принципу code first: Есть абстрактный класс Client (именно его таблица создаётся в БД):
1)
System.Data.SqlClient.SqlException HResult=0x80131904 Message=Introducing FOREIGN KEY constraint 'FK_dbo.Clients_dbo.ClientAddresses_Firm Address_ClientAddressId' on table 'Clients' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint or index. See previous errors. Ткните мне балбесу, пожалуйста, пальцем в место ошибки. П.С. Раньше было немножко иначе и всё работало, а потом увидел ошибку, переделал, заболел, а через 2 дня вернулся к коду и хоть убей не могу понять в чем проблема. Спасибо заранее.
0
|
|||||||||||||||||||||||||||||||
| 20.12.2017, 18:31 | |
|
Ответы с готовыми решениями:
12
Вопрос о цикличности Разбить массив на тройки с элементами цикличности При выводе цикличности не повторяет строку с именем автора |
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 20.12.2017, 18:39 | |
|
boshik1983, видимо маппинг у вас с ошибкой производится. И что, у частного лица не может быть адреса?
0
|
|
|
4 / 4 / 1
Регистрация: 16.06.2016
Сообщений: 21
|
|
| 20.12.2017, 18:50 [ТС] | |
|
Программа пишется под фирму, владеющую сеть рекламных конструкций
Проблема в том, что под частным лицом подразумевается дядя Вася, который прибежал, указал пальцем место, где должна быть его реклама (или просто поздравление жены с ДР), дал денег и свалил. У него может быть адрес, но не обязательно (и как мне сказали, в 100% случаев фирма не знает этого адреса), о вот для разных там учреждений, компаний, предпринимателей... адрес обязателен, поскольку им высылаются счета и акты. Если я укажу поле адреса в классе Client, то: 1) либо дяде Васе нужно будет выдумывать адрес (если поле обязательное), 2) либо возможен будет вариант создания клиента-предприятия без адреса (если поле не обязательное), что очень нежелательно
0
|
|
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 20.12.2017, 18:52 | |
|
3) Контролировать наличие адреса на уровне бизнес-логики.
Добавлено через 36 секунд Вы бы показали, как мапинг производите.
0
|
|
|
4 / 4 / 1
Регистрация: 16.06.2016
Сообщений: 21
|
||||||
| 20.12.2017, 19:02 [ТС] | ||||||
|
Мапинг никак не производится. Всё оддал в руки EntityFramework:
Создал классы со свойствами, создал Контекс (часть его выложил), а дальше, если надо внести запись или чего, то делаю следущее:
0
|
||||||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 20.12.2017, 19:04 | |
|
boshik1983, вы иерархию классов соорудили. Такое требует настройки, чтобы EF знал как это реализовать: TPH, TPT или TPC. "Из коробки" такое само не заработает. Или сделайте всё на базе одного класса или настройте маппинг.
0
|
|
|
|
||
| 20.12.2017, 19:07 | ||
|
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 20.12.2017, 19:08 | |
|
insite2012, нет, тут всё нормально. Наследие идёт от "клиента". А это или юрлицо или физхаря.
0
|
|
|
|
||
| 20.12.2017, 19:12 | ||
|
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 20.12.2017, 19:15 | |
|
insite2012, да вполне себе. "Клиент" же абстрактен. А физлицо != фирма. Как бы нормально. Другое дело, что физлицо - бомж, если судить по данной модели))
0
|
|
|
|
||
| 20.12.2017, 19:17 | ||
Но ТС виднее, пусть делает как удобнее)))На мой взгляд, тут все же нарушение Interface Segregation Principle-частное лицо имеет (и зависит от) то, что ему и даром не нужно.
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 20.12.2017, 19:21 | |
|
insite2012, ну не знаю. Я вижу, что и физлицо и юрлицо - оба клиенты. А разведение специфичных свойств вполне себе укладыватеся в эту иерархию.
0
|
|
|
4 / 4 / 1
Регистрация: 16.06.2016
Сообщений: 21
|
|
| 20.12.2017, 19:22 [ТС] | |
|
Ребята всем спасибо. Ответ нашелся. Короче фишка вот в чём (и я это знал, но затмение нашло):
Я создаю таблицу от базового класса. При этом эта таблица втягивает все поля классов-наследником. И тут получается, что в таблице будут существовать 2 foreign key, при этом каскадное удаление я не отменил (что можно сделать в мапинге). Варианта решения проблемы 3: 1) Настроить мапинг и запретить каскадное удаление 2) Создать таблицы для каждого класса-наследника, а не одну таблицу базового класса 3) Перенести поле Адреса в базовый класс и контролировать его в бизнес логике. Огромное спасибо всем.
0
|
|
| 20.12.2017, 19:22 | |
|
Помогаю со студенческими работами здесь
13
Ошибка в модели данных Ошибка работы с очередью модели
Ошибка при запуске модели АД с КЗ ротором Где может быть ошибка в модели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|