Избегайте циклической зависимости: MySQL / Entity Framework

У нас возникли проблемы с циклической зависимостью, и мы задались вопросом, может ли кто-нибудь предложить решение. Если мы хотим удалить клиента, фреймворк сущности отказывается это делать, потому что он сообщает нам, что ограничение внешнего ключа не работает. Наши таблицы настроены следующим образом:

ClientAccounts

Id [PK]
Forenames
Surname
DefaultEmailId [FK, NULLABLE]

ClientEmailAddresses

Id [PK]
Description
EmailAddress
ClientId [FK, NON-NULLABLE]

Таким образом, клиент может иметь ноль или несколько адресов электронной почты, связанных с его учетной записью. Один из них будет их контактным адресом электронной почты по умолчанию.

Я понимаю, что если мы позволим таблице ClientEmailAddresses иметь нулевой ClientId, все будет работать нормально; но мы не хотим ситуации, когда у нас могут быть бесхозные записи электронной почты.


person pierre    schedule 07.09.2011    source источник


Ответы (2)


Может быть, лучше сохранить поле default в таблице ClientEmailAddresses и удалить DefaultEmailId из таблицы ClientAccounts. Я не знаю структуру вашего кода, но иногда такая структура, как ваша, является избыточной.

person Andrej Ludinovskov    schedule 07.09.2011
comment
Нам нравится это решение, так как оно устранит круговую проблему, но мы опасаемся, что тогда у нас может быть несколько значений по умолчанию. - person pierre; 07.09.2011
comment
Да, в этом случае ваша логика будет более сложной. Вам следует сначала сбросить предыдущий статус по умолчанию и установить новый. - person Andrej Ludinovskov; 07.09.2011

Не следует ли сначала удалить записи в ClientEmailAddresses?

Представьте себе такую ​​хранимую процедуру:

##  delete Client
delete from ClientEmailAddresses where ClientId = ID2delete
delete from ClientAccounts where Id = ID2delete

где Id2delete - это идентификатор клиента, который нужно удалить.

Не пробовал, но должно работать!

person Louis    schedule 07.09.2011