2008-12-03 6 views
7

Ich verwende Linq zu Entitäten, die einen Table per Type Ansatz anwenden. Das ist bisher sehr gut gelaufen. Ich habe folgendes Setup:Linq zu Entitäten, Tabelle pro Typ und nullable Fremdschlüsselbeziehungen

  • Geordnete Tabelle
  • Child Table (Erbt von den Eltern)
  • Groß Child Table (Erbt von Child Table)
  • Linking Table (Hat Fremdschlüssel Nullable, zu Child Table)

Hier ist das Datenbankdiagramm

alt text

Nach dem obigen Video habe ich die Methode Table Per Type auf das Standardschema angewendet, das Linq für Entitäten erstellt, wenn Sie die obigen Tabellen zu einem Modell hinzufügen.

Vor Tabelle pro Typ Anwendung:

alt text

Nach Tabelle pro Typ:

alt text

ich dann das Projekt zusammengestellt und bekam den Fehler, den Sie im Bild oben sehen kann. Um dies zu beheben, ging ich zum Mapping für den Fremdschlüssellink, ich fügte das childid-Feld hinzu, über das die Fehlermeldung stöhnte.

alt text

ich dann neu kompiliert und eine andere Fehlermeldung erhalten:

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.

Dies ist der Punkt, den ich jetzt bin. Das Problem scheint, dass die "ChildID" auf der "LinkingTable" NULL ist. Wenn ich es auf Null setze, bekomme ich den obigen Fehler nicht.

Ich habe die Datenbank und das Projekt in den obigen Schritten zu einem sky drive gespeichert.

Kann jemand diesen Fehler beheben?

Dave

Hier ist die Fest-Code (dank der Gecko)

Vor

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

Nach

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

Antwort

5

Versuchen Sie, den AssociationMapping Knoten im Mapping-Aktualisierungsabschnitt Ihrer EDMX-Datei, um a Voraussetzung für Nullen.

z.B.

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

Danke .. ich gebe es und lass es dich wissen. – CraftyFella

+0

brilliant ... das funktioniert total .. Es sieht jetzt so aus: CraftyFella