2008-12-03 7 views
7

Używam Linq do podmiotów stosujących podejście Table per Type. Do tej pory działo się to bardzo dobrze. Mam następującą konfigurację:Linq do encji, tabela na typ i zerowe relacje klucza obcego

  • tabeli nadrzędnej
  • tabeli podrzędnej (Dziedziczy z rodzicem)
  • Wielki dziećmi Tabela (Dziedziczy z tabeli podrzędnej)
  • linkami tabeli (ma klucz obcy Nullable, aby Tabela dziecko)

Oto schemat bazy danych

alt text

Po powyższym wideo zastosowałem podejście Tabela na typ do domyślnego schematu, który Linq do encji tworzy po dodaniu powyższych tabel do modelu.

Przed nałożeniem Table per Typ:

alt text

Po Tablicy od rodzaju:

alt text

Następnie skompilowany projekt, ale ten błąd można zobaczyć na obrazku powyżej. Aby to naprawić poszedłem do mapowania dla klucza obcego, dodałem pole childid, na które słychać było komunikat o błędzie.

alt text

Potem rekompilacji i dostać inny błąd:

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.

jest to punkt, jestem obecnie. Problem wydaje się, że "ChildID" w "LinkingTable" jest Nullable. Jeśli ustawię go na Non nullable, nie otrzymam powyższego błędu.

Zapisałem bazę danych i projekt używany w powyższych krokach do sky drive.

Czy ktoś wie, jak naprawić ten błąd?

Dave

Oto stała Code (Dzięki Gecko)

Przed

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

Po

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

Odpowiedz

5

Spróbuj zaktualizować węzeł AssociationMapping w sekcji mapowania pliku EDMX, aby dołączyć warunek dopuszczający wartości zerowe.

np.

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

Dzięki .. Dam ci iść i dam ci znać. – CraftyFella

+0

genialny ... to działa całkowicie. Wygląda teraz tak: CraftyFella

Powiązane problemy