2008-12-03 6 views
7

Я использую Linq для объектов, применяющих подход Table per Type. Это происходит очень хорошо, до сих пор. У меня есть следующие настройки:Linq to Entities, таблица для типа и взаимозависимых внешних ключей

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

Вот база данных диаграмма

alt text

Следуя приведенному выше видео, я применил подход Table Per Type к схеме по умолчанию, которую Linq создает сущности при добавлении вышеуказанных таблиц в модель.

Перед применением таблицы за Тип:

alt text

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

alt text

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

alt text

Я тогда перекомпилировать и получить другую ошибку:

Problem in Mapping Fragments starting at lines 147, 176: Two entities with different keys are mapped to the same row. Ensure these two mapping fragments do not map two groups of entities with overlapping keys to the same group of rows.

Это точка я теперь. Проблема заключается в том, что «ChildID» в «LinkingTable» является Nullable. Если я установил его недействительным, я не получу вышеуказанную ошибку.

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

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

Dave

Вот фиксированный код (благодаря 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> 

После

<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> 

ответ

5

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

например.

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

Спасибо .. я дам вам информацию и дам вам знать. – CraftyFella 2008-12-03 12:51:03

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