Domanda

Ho una tabella con una PK int, non campo NULL, e due campi stringa NULL.

Quando vado e impostare un disegno TPH in stile EF, ho impostato in questo modo:

Il tipo di livello superiore ha solo il PK e il campo NOT NULL.

I controlli di primo livello il primo campo nullable come discriminatore. Il tipo risultante non nullo è astratta. Ho mappare il campo di conseguenza.

I farlo di nuovo per il secondo campo, ancora una volta in cui non mappare nulla. Ho impostato annullabile = false sui campi ho mappa.

<EntitySetMapping Name="Items">
        <EntityTypeMapping TypeName="IsTypeOf(Model1.Item)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name="OtherID" ColumnName="OtherID" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.BothNullItem)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <Condition ColumnName="FirstNullField" IsNull="true" />
            <Condition ColumnName="NullField2" IsNull="true" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.FirstFieldNull)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name=FirstNullField" ColumnName="FirstNullField" />
            <Condition ColumnName="FirstNullField" IsNull="false" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.NotNullSubItem1)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <Condition ColumnName="NullField2" IsNull="true" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Model1.NotNullSubItem2)">
          <MappingFragment StoreEntitySet="Items">
            <ScalarProperty Name="ID" ColumnName="ID" />
             <ScalarProperty Name="NullField2" ColumnName="NullField2" />
             <Condition ColumnName="NullField2" IsNull="false" />
          </MappingFragment>
        </EntityTypeMapping>
</EntitySetMapping>

mi sto "due entità con chiavi diverse sono mappati alla stessa riga."

Sto pensando che sia perché forse attributo non nullo del primo elemento non è sempre ereditato dai figli.

Ho creato un terzo tipo per cercare di prendersi cura del caso di NullField1 essere nullo e NullField2 non essere nulla (il che non accadrà nel mio DB, ho un vincolo), ma anche se ho aggiunto che doesn 't lavoro.

mi esplicitamente aggiungendo la condizione non nulla su uno dei 2 sub bambini richiede di mappare la colonna, che ancora non funziona, anche se traccio a qualche proprietà estranea.

Nessuno dei combinazioni di condizioni di "BothNullItem" funziona sia.

Tutte le idee?

È stato utile?

Soluzione

Welp, ho finito per rinunciare a cercare di ottenere discriminatore colonne si propagano attraverso l'eredità così ho creato 3 viste, di un livello superiore, uno per nulla field1 e non campo nullo uno, e poi non nullo campo uno, faccio field2 colonna discriminatore in EF. Questo suona come una risposta scadente al mio problema quindi mi piacerebbe sentire da qualcuno nel sapere ciò che l'affare è. Buehler?

UPDATE: FISSO! Andando fuori del concetto di partizionamento orizzontale in uno degli articoli che ho trovato su MSDN (http://msdn.microsoft.com/en-us/library/cc716779.aspx)I entrò e ha aggiunto manualmente le condizioni della MSL. Sembra che non si può avere automaticamente questo lavoro dal progettista. Per quelli di voi chiedendo, aprire l'edmx nel editer xml e scendere e guardare gli elementi condizioni le mappature. Aggiungere in condizioni aggiuntivi in ??funzione delle esigenze (apparentemente le condizioni non ereditare da enti controllanti quindi bisogna aggiungerli manualmente per i bambini) e compilare!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top