Таблицы ссылок - сначала код - Entity Framework - Отображение таблиц - PullRequest
1 голос
/ 13 ноября 2011

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

Рассматривая сопоставление со структурой, включающей таблицу ссылок, мне кажется, что есть странная особенность Code First, таблиц ссылок и TPH или, возможно, просто отсутствие прозрачности.

Я создал производный класс с атрибутом [Table ("")] для сопоставления объектов со структурами таблиц следующего вида:

(Case 1) Employees -> Attributes -> AttributeTypes

(Case 2) Employees -> EmployeeAttributeLink -> Attributes -> AttributeTypes

В первом случае я достиг результатов, которые яхотел для запросов и экономии TPH.(Я использовал атрибуты аннотации данных вместе с текущими API, чтобы отобразить производные классы в правильный столбец идентификатора дискриминатора).

Однако во втором случае я получил эту ошибку: «Типы сущностей A и B не могут совместно использовать таблицу B, поскольку они не находятся в одной иерархии типов [ИЛИ], не имеют действительного внешнего ключа один к одномуотношения с сопоставлением первичных ключей между ними.Необходимо иметь соответствие 1-1 '

Когда я посмотрел на имена таблиц, которые он пытался отобразить на типы, я увидел, что он был сбит с толку.Однако я не мог понять, что я делаю неправильно, так как я использовал правильный атрибут отображения таблицы над наследующими классами (я не определил все подтипы, которые могут исходить от дискриминатора - имеет ли это значение?).

Я ввел некоторые атрибуты FK, пытаясь адресовать вторую часть [ИЛИ] в сообщении об ошибке.Это привело меня к новым проблемам, то есть к неспособности определить принципала / зависимого ... Затем я попытался использовать атрибуты [InverseProperty] ... И затем я начал вытягивать свои волосы.

Теперь, откат и удалениеатрибуты, я решил не полагаться на атрибут [Table ("")] и сопоставить тип с таблицей, используя свободный API.Кажется, это работает.

Мой вопрос: почему поведение атрибута [Table ("")] и функции ToTable в свободном API ведет себя по-разному?Я бы подумал, что они взаимозаменяемы

Спасибо

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