2012-10-03 17 views
8

Ho bisogno di utilizzare l'ereditarietà con EF4 e il modello TPH creato dal DB.
Ho creato un nuovo progetto per testare le classi semplici. V'è il mio modello di classe:EF4 e più livelli astratti

enter image description here

C'è la mia tabella in SQL Server 2008:

VEHICLE 
    ID : int PK 
    Owner : varchar(50) 
    Consumption : float 
    FirstCirculationDate : date 
    Type : varchar(50) 
    Discriminator : varchar(10) 

ho aggiunto una condizione nella mia EDMX sul campo discriminatore di differenziare lo scooter, auto, Enti di moto e bici.

Veicolo e veicolo motorizzati sono astratti.

Ma quando compilo, appare questo errore:

Errore 3032: Problema in frammenti di mappatura a partire dalle linee 78, 85 : EntityTypes EF4InheritanceModel.Scooter, EF4InheritanceModel.Motorbike, EF4InheritanceModel.Car, EF4InheritanceModel. La bicicletta viene mappata alle stesse file nella tabella Veicolo. Le condizioni di mappatura possono essere utilizzate per distinguere le righe a cui sono associati questi tipi.

Edit:
Ladislav:
ho provato e cambiare l'errore di diventare per tutti i miei soggetti:

Errore 3034: Problema in frammenti di mappatura a partire dalle linee 72, 86: Un'entità viene mappata su> diverse righe all'interno della stessa tabella. Assicurarsi che questi due frammenti di mappatura non mappino due> gruppi di entità con chiavi sovrapposte a due distinti gruppi di righe.

Per Henk (con Ladislay suggerimento):
Ci sono tutti i dettagli mappature: enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

Cosa c'è di sbagliato?

Grazie

+0

Puoi pubblicare alcuni dei dettagli della mappatura? Principalmente riguardo al Discriminator. –

+0

Prova ad aggiungere un valore discriminante anche per le classi astratte. –

+0

Grazie, ma non funziona. Vedi il mio post, l'ho spiegato. Per informazioni, se rimuovo la proprietà astratta Motorized Veicolo e Veicolo, è lavoro. Ma ho bisogno che ci siano astratti. – Cedric

risposta

1

EF4 non gestisce questi bene. Puoi farlo con un discriminatore, ma le classi devono essere non astratte. Dovrai utilizzare un altro metodo come l'analisi del codice o i test per assicurarti che la classe base non venga mai creata un'istanza da qualcosa di diverso da Entity Framework.

Oppure, è possibile eseguire l'aggiornamento a EF6. Non sono sicuro se lo supporterà meglio, ma gestirà sicuramente meglio le gerarchie dei modelli, consentendo migliori schemi di database che supportano meglio il modello.