Условное отображение Entity Framework - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть устаревшая база данных, в которой есть таблица с именем Address. Теперь две другие таблицы могут иметь адресную информацию. Чтобы определить, из какой таблицы он пришел, есть поле SourceID. Если SourceID равен 1, то он связан с первой таблицей, если он равен 2, это информация об адресе для второй таблицы.

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

Мне интересно, использую ли я Entity Framework для создания модели, которая будет иметь эту связь. Где таблица 1 может иметь объект, имеющий навигацию для адресации информации (с условием, что SourceID = 1) и такой же со второй таблицей.

Я попытался создать условное сопоставление и установить для него значение «Когда SourceID = 1». Я также удалил сопоставление из сопоставления столбца, поскольку столбец можно сопоставить только один раз. Когда я пытаюсь скомпилировать, я получаю следующую ошибку:

Ошибка 3004. Проблема при сопоставлении фрагментов, начинающихся со строки 683. Не указано сопоставление для свойств Address.SourceID в параметре Set Addresses. Объект с ключом (PK) не будет проходить в обоих направлениях, когда: объект имеет тип [Model.Address]

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 15 ноября 2011

Не используйте условное отображение.Сопоставьте свой адрес с объектом без свойства SourceID и создайте два производных объекта из объекта адреса.Используйте SourceID в качестве дискриминатора (наследование TPH - оно работает так же, как условное отображение, но у вас есть несколько объектов с различным значением дискриминатора).Свяжите свой первый и второй объект с правильным адресом суб-объекта.

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