Линк к сущностям, таблица по типу и Nullable внешние ключи - PullRequest
7 голосов
/ 03 декабря 2008

Я использую Linq для сущностей, применяющих таблицу для каждого типа . Это шло очень хорошо, до сих пор. У меня есть следующие настройки:

  • Родительская таблица
  • Детский стол (Наследует от родителя)
  • Большой Детский Стол (Унаследовано от дочернего стола)
  • Связывание таблицы (имеет внешний ключ, допускающий значение Nullable, к дочерней таблице)

Вот схема базы данных

alt text

После вышеприведенного видео я применил подход «Таблица по типу» к схеме по умолчанию, которую Linq для объектов создает при добавлении вышеупомянутых таблиц в модель.

Перед применением таблицы по типу:

alt text

После таблицы по типу:

alt text

Затем я скомпилировал проект и получил ошибку, которую вы видите на изображении выше. Чтобы исправить это, я перешел к отображению ссылки на внешний ключ и добавил поле childid, о котором стонало сообщение об ошибке.

alt text

Затем я перекомпилировал и получил еще одну ошибку:

Проблема с отображением фрагментов в строках 147, 176: два объекта с разные ключи отображаются на одно и то же строка. Убедитесь, что эти два сопоставления фрагменты не отображают две группы сущности с перекрывающимися ключами к та же группа строк.

Это точка, в которой я сейчас нахожусь. Проблема заключается в том, что ChildID на LinkingTable является Nullable. Если я установлю это как Не обнуляемое, я не получу вышеупомянутую ошибку.

Я сохранил базу данных и проект, использованный на предыдущих этапах, на sky drive .

Кто-нибудь знает, как исправить эту ошибку?

Dave

Вот фиксированный код (спасибо The Gecko)

До

<AssociationSetMapping Name="FK_LinkingTable_Child"
    TypeName="TablePerTypeModel.FK_LinkingTable_Child" 
    StoreEntitySet="LinkingTable">
    <EndProperty Name="Child">
        <ScalarProperty Name="Id" ColumnName="ChildID" />
    </EndProperty>
    <EndProperty Name="LinkingTable">
        <ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" />
    </EndProperty>
</AssociationSetMapping>

* После 1060 *

<AssociationSetMapping Name="FK_LinkingTable_Child"
    TypeName="TablePerTypeModel.FK_LinkingTable_Child" 
    StoreEntitySet="LinkingTable">
    <EndProperty Name="Child">
        <ScalarProperty Name="Id" ColumnName="ChildID" />
    </EndProperty>
    <EndProperty Name="LinkingTable">
        <ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" />
    </EndProperty>
    <Condition ColumnName="ChildID" IsNull="false"/>
</AssociationSetMapping>

1 Ответ

5 голосов
/ 03 декабря 2008

Попробуйте обновить узел AssociationMapping в разделе Mapping вашего файла EDMX, чтобы включить условие, допускающее нулевые значения.

, например

<AssociationSetMapping>
  ...
  <Condition ColumnName="" IsNull="false"/>
</AssociationSetMapping>
...