Отношения «многие ко многим» в EF4 с «общими» столбцами - PullRequest
3 голосов
/ 25 мая 2011

Отказ от ответственности: Строго говоря, я имею в виду не отношение «многие ко многим», но, учитывая, что в нем используется ассоциативная таблица, я решил, что было бы лучше быть немного менее точным, чтобы дать лучшее представление о что я делаю.

В моей базе данных есть эквивалент следующих трех таблиц:

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 также будет жаловаться на наличие циклических отношений, и мне придется разорвать вставляет в код.

1 Ответ

2 голосов
/ 25 мая 2011

Здесь мыслям вслух:

Customer
---------
CustomerID PK
...

CustomerAddress
---------
AddressNo  PK
CustomerID FK -> Customer, non-nullable
... address columns ...

CustomerPrimaryAddress
--------------
CustomerID PK, FK -> Customer
AddressNo      FK -> CustomerAddress 

Это кажется таким, как будто оно должно правильно определять количество элементов, но я, возможно, что-то упустил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...