Отношения с целью - PullRequest
       35

Отношения с целью

1 голос
/ 07 марта 2011

У меня есть две таблицы: Master и Detail.Оба используют первичный ключ, который называется [Identity].Деталь также имеет ссылку на Мастер под названием [MasterID].И, к сожалению, в обеих таблицах есть несколько огромных полей (TEXT, Binary, и тому подобное), которые я не хочу видеть на своем веб-сайте.Поэтому для повышения производительности я создал два представления (ViewMaster и ViewDetail), которые оба просто выбирают подмножество обеих таблиц.Теперь проблема: я использую сайт динамических данных, чтобы просто отобразить содержимое этих представлений.Это работает.Но я хочу, чтобы они связывались друг с другом, чтобы я мог отфильтровать подробные записи по их связанной основной записи.С таблицами это легко: просто добавьте внешний ключ.Но у представлений нет внешних ключей!Итак, каков самый простой способ для автоматического добавления DDS ссылок между этими представлениями?Или есть другие варианты отображения обзора Master-Detail только с DDS?Нет, я не использую MVC.Я знаю, что он может сделать, но это только две из 75+ таблиц, с которыми мне нужно работать.DDS позволяет быстро создавать обзоры для всех таблиц, даже позволяя вводить данные по самым важным.

1 Ответ

1 голос
/ 07 марта 2011

Динамический сайт данных построен на основе модели Entity Framework.Вы можете обмануть сайт, чтобы он думал, что между этими представлениями есть связь, но это означает, что вы должны добавить это отношение вручную в EDMX.Это довольно сложно, потому что вы должны:

  • Создать связь в конструкторе EDMX.
  • Удалить свойство FK из связанной сущности в EDMX
  • Открыть EDMX как XML и добавить вручнуюотношение к части SSDL = создание набора ассоциаций и ассоциации
  • Открыть обратно в EDMX и ассоциации карт

Ассоциация в SSDL должна выглядеть следующим образом:

<EntityContainer>
  ...
  <AssociationSet Name="MyDummyFK" Association="....MyDummyFK">
    <End Role="FirstView" EntitySet="FirstView" />
    <End Role="SecondView" EntitySet="SecondView" />
  </AssociationSet>
</EntityContainer>
<Association Name="MyDummyFK">
  <End Role="FirstView" Type="....FirstView" Multiplicity="0..1" />
  <End Role="SecondView" Type="....SecondView" Multiplicity="*" />
  <ReferentialConstraint>
    <Principal Role="FirstView">
      <PropertyRef Name="Id" />
    </Principal>
    <Dependent Role="SecondView">
      <PropertyRef Name="FirstViewId" />
    </Dependent>
  </ReferentialConstraint>
</Association>

Другой подходсоздать временные таблицы в БД с этим отношением и позволить EF генерировать все для вас.Затем вы вручную измените EDMX и переименуете все, чтобы указать ваши взгляды вместо таблиц.После этого вы можете удалять таблицы.

Но я думаю, что вы можете использовать свои таблицы напрямую.Просто измените EDMX (SSDL должен быть снова изменен вручную), чтобы он не включал эти столбцы TEXT и BINARY, и ваш сайт не будет запрашивать их.

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

...