2011-11-15 4 views
0

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

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

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

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

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

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

ответ

4

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

+1

Что делать, если я хотел бы сделать этот шаг дальше. Что делать, если в моей таблице есть второе условие, определяющее идентификатор типа. Я попытался наследовать от нового типа, а затем добавил новое условие, поэтому TypeId = 2. Рассматривая SQL Profiler, это не сохраняет оба условия в SQL, который он создает. Есть ли способ иметь многоуровневый TPH? –

Смежные вопросы