Отказ от ответственности: Строго говоря, я имею в виду не отношение «многие ко многим», но, учитывая, что в нем используется ассоциативная таблица, я решил, что было бы лучше быть немного менее точным, чтобы дать лучшее представление о что я делаю.
В моей базе данных есть эквивалент следующих трех таблиц:
Customer
---------
CustomerID PK
...
CustomerAddress
---------
CustomerID PK, FK -> Customer
AddressNo PK
... address columns ...
CustomerPrimaryAddress
--------------
CustomerID PK, FK -> Customer
AddressNo FK -> CustomerAddress (with CustomerID, so CustomerID
participates in both relationships)
Если это не очевидно, цель здесь состоит в том, чтобы разрешить использование нескольких адресов для каждого клиента, при этом не более одного адреса для каждого клиента в качестве «основного». Я использую ассоциативную таблицу, чтобы избежать размещения пустого столбца PrimaryAddressNumber
на Customer
, а затем создаю внешний ключ от Customer
до CustomerAddress
.
Это все хорошо, но EF помещает сущность CustomerPrimaryAddress
в мою модель. Поскольку его единственная цель - служить ассоциативной таблицей, мне не нужно представлять эту таблицу в коде. Я удалил таблицу CustomerPrimaryAddress
из концептуальной модели, а затем создал связь между Customer
и CustomerAddress
следующим образом:
Table Customer CustomerAddress
Multiplicity 1 0..1
Затем я сопоставил ассоциацию для использования таблицы CustomerPrimaryAddress
из модели хранилища, и все столбцы были сопоставлены просто отлично, как мне показалось.
Моя проблема в том, что теперь EF жалуется на то, что CustomerID
в CustomerPrimaryAddress
сопоставляется с двумя местоположениями в моей ассоциации, так как оно сопоставлено с Customer
и CustomerAddress
.
Есть ли способ обойти это? Я бы предпочел не добавлять пустые столбцы в Customer
для представления основного номера адреса, так как это не только не очень приятный вариант с точки зрения администратора баз данных, EF также будет жаловаться на наличие циклических отношений, и мне придется разорвать вставляет в код.