Создание структуры сущностей обрабатывает представления с отношениями «многие ко многим», как и таблицы с отношениями «многие ко многим» - PullRequest
1 голос
/ 30 августа 2011

У меня есть три представления, которые я вручную создал в БД.

Первое представление - «Регион», второе - «FIPS», а последнее «многие ко многим» между ними называется «Region2FIPS». Это все представления, и мне нужен только доступ для чтения данных, поэтому я не беспокоюсь о наличии обновляемых представлений.

Я добавил каждое из этих представлений в Entity Framework и создал между ними соответствующие ассоциации.

От региона к региону2FIPS - это 1 ко многим. FIPS для Region2FIPS - это 1 ко многим.

Представление «Region2FIPS» содержит только два столбца, один из которых называется «FIPSID», а другой - «RegionID». Эти столбцы связаны с их соответствующими представлениями в отношениях, которые я определил выше.

Когда этот тип ассоциации создается для таблиц в БД, Entity Framework знает, что это отношение «многие ко многим», и создает в «Регион» свойство навигации, называемое «FIPS», которое я могу использовать для навигации Детская коллекция FIPS. Это также относится к «FIPS» к «Региону».

Однако, когда выполняется вручную, с представлениями, это поведение не проявляется. Вместо этого мой объект «Регион» имеет коллекцию объектов «Region2FIPS», каждый из которых имеет свойство навигации с именем «FIPS», которое имеет тип «FIPS». А мой объект "FIPS" имеет коллекцию объектов "Region2FIPS", каждый из которых имеет свойство навигации, называемое "Регионы", типа "Region".

Я предполагаю, что это как-то связано с тем, что я не могу создавать ссылки на внешние ключи в представлениях, поэтому структура сущностей не реализует отношения многие ко многим. Но я подумал, что если бы я вручную создал отношение «многие ко многим» между представлениями, он бы его распознал и правильно обрабатывал переходы между типами. Есть ли способ заставить меня сделать это?

1 Ответ

0 голосов
/ 30 августа 2011

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

Один довольно простой способ - использовать сопоставление Code First.Но это означает, что ваша модель должна быть Code First для начала.Если вы пишете новую модель, просто сделайте это.

Однако, если вы используете сопоставление DB First, вам придется выполнять сопоставление вручную.Ваш SSDL, вероятно, уже будет правильным, как только вы определите «первичные ключи» представлений.Затем вам придется удалить объекты «Region2FIPS» из CSDL ( не только из конструктора! ) и вручную исправить MSL.

Возможно, самый простой способ сделать этоиспользовать конструктор для автоматического сопоставления реальных таблиц БД (не представлений) с аналогичной схемой, а затем заменить имена таблиц именами представлений в EDMX с помощью редактора XML.

...