Perché ricevo questo errore: Nessuna mappatura specificata per il seguente EntitySet / AssociationSet - Entity1?


96

Sto usando Entity Framework 4 con l'approccio Model First.

Ho avviato il progetto, progettato le entità e generato il database. Tutto ha funzionato bene.

Quindi dovevo tornare indietro e aggiungere un'altra entità al mio modello. Tuttavia, mentre trascino un'entità su EDMX ottengo questo errore:

inserisci qui la descrizione dell'immagine

Tutto a posto! Ho solo bisogno di mappare Entity1 su una tabella .. Ma hey! Sto usando l'approccio Model First, mi aspetto che crei la tabella per me quando generi il DDL.

Come posso aggirare questo errore?


1
Quindi puoi generare script di database dal tuo modello?
Ladislav Mrnka

Risposte:


147

Ciò è dovuto al modo in cui EF4 funziona con model-first.

Quando crei per la prima volta un modello model-first, è in uno stato in cui SSDL non esiste. Puoi trascinare entità, associarle e così via e tuttavia, se dai un'occhiata all'SSDL sul file EDMX, vedrai che nessuna delle entità ha una tabella di archiviazione associata nell'SSDL.

Ciò cambia quando fai clic sulla Generate Database From Modelvoce del menu contestuale. La parte confusa è che questa azione non si limita a generare uno script DDL. In effetti, cambia il file EDMX per includere le informazioni SSDL. Da questo punto in poi, il file EDMX entrerà in uno stato in cui ogni entità nel designer / CSDL deve mappare a un'entità nell'SSDL. Se non si esegue la mappatura, verrà generato un errore in fase di compilazione:

Nessuna mappatura specificata per il seguente EntitySet / AssociationSet - (EntityName)

Un altro fatto interessante è che non è il tipo di errore che impedirà la compilazione. In effetti, genererà la libreria di classi di output. Non dovrebbe essere un avvertimento o qualcosa del genere?

Per evitare questo errore, tutto ciò che devi fare dopo aver inserito una nuova entità è di Generate Database From Modelnuovo. Ciò aggiornerà l'SSDL e correggerà le mappature.

MODIFICARE

Se non si utilizza model-first e si "aggiorna dal database", si verificherà questo errore anche nel caso in cui si sia eliminata una tabella in DB Server. Questo perché Entity Framework non eliminerà automaticamente l'entità per te. Elimina l'entità manualmente e l'errore scomparirà.


1
Ho riscontrato lo stesso problema dopo aver aggiornato il mio modello rispetto alle modifiche bd (che potrebbe non essere buono, poiché il mio approccio non è il primo modello).
balanza

5
@balanza, quando non stai usando model-first e aggiorni il tuo modello in base al database, riceverai questo errore quando elimini una tabella nel server perché il designer EF NON eliminerà l'entità automaticamente. Quando elimini manualmente il tipo di entità, l'errore scomparirà
André Pena,

Ho cambiato il mio direttamente nel file xml del modello di dati dell'entità. Avevo un sacco di tabelle e funzioni e c'era il rischio di una mancata corrispondenza, quindi l'ho fatto manualmente.
Bat_Programmer

Questo è SUPER utile. Inoltre, se stai usando model-first e "update from database" e ottieni nuove tabelle, avrai anche l'errore. Ma l'esecuzione di Genera database dal modello (non è necessario eseguire effettivamente lo script generato - ucciderà i tuoi dati!) Risolverà i problemi di mappatura nel tuo codice e non avrai problemi a usarlo in futuro.
Brian Warshaw,

1
Come gestireste l'aggiornamento dello schema per il database SQL Server CE già distribuito? Può spostarlo in una domanda separata, se è una procedura totalmente non correlata
FYK

35

Ho scoperto che stavo ricevendo lo stesso errore perché avevo dimenticato di creare un vincolo referenziale dopo aver creato un'associazione tra due entità.


13
FYI: controlla le proprietà dell'associazione e in basso "Vincolo referenziale" sarà vuoto. Fare clic sui puntini di sospensione e creare un vincolo.
Patrice Calvé

Questo mi ha aiutato. Ho dovuto creare una relazione 1 .. * dalla mia entità di origine alla mia entità di navigazione.
duyn9uyen

21

Errore 3027: nessuna mappatura specificata per il seguente EntitySet / AssociationSet ... "- Problemi di Entity Framework

Se stai sviluppando un modello con Entities Framework, a volte potresti incorrere in questo fastidioso errore:

Errore 3027: nessuna mappatura specificata per il seguente EntitySet / AssociationSet [nome entità o associazione]

Questo potrebbe non avere senso quando tutto sembra a posto sull'EDM, ma questo perché questo errore di solito non ha nulla a che fare con l'EDM. Quello che dovrebbe dire è "rigenerare i file del database".

Vedi, Entities controlla SSDL e MSL durante la compilazione, quindi se hai appena cambiato il tuo EDM ma non usi Genera modello di database ... allora si lamenta che ci sono cose mancanti nei tuoi script sql.

quindi, in breve, la soluzione è: "Non dimenticare di generare il modello di database ogni volta dopo aver aggiornato l'EDM se stai sviluppando il modello prima. Spero che il tuo problema sia risolto".


Questo ha funzionato per questo stesso errore facendo il Genera modello di database ha aiutato a cancellare l'eccezione
kolexinfos

7

Nel mio caso, un altro sviluppatore aveva rimosso alcune delle tabelle dal database sottostante. Quando me ne sono reso conto e ho rimosso queste tabelle dall'entità, il problema è stato risolto. Non era così ovvio come sembra.


6

Ho riscontrato lo stesso errore, ma non stavo usando il modello prima. Si è scoperto che in qualche modo il mio file EDMX conteneva un riferimento a una tabella anche se non veniva visualizzato nel designer. È interessante notare che quando ho eseguito una ricerca di testo per il nome della tabella in Visual Studio (2013), la tabella non è stata trovata.

Per risolvere il problema, ho utilizzato un editor esterno (Notepad ++) per trovare il riferimento alla tabella incriminata nel file EDMX, quindi ho rimosso (con attenzione) tutti i riferimenti alla tabella. Mi dispiace dover dire che non so come il file EDMX sia entrato in questo stato in primo luogo.


5

Ho avuto un cambio di tabella e ha creato un'altra entità con un numero 1 alla fine (come MyEntity1e a MyEntity) come confermato dal browser del modello edmx. Qualcosa sulle due entità insieme ha confuso l'elaborazione.

La rimozione del tavolo e l'aggiunta di nuovo lo hanno risolto.


Nota che se TFS è collegato, esegui un check-in di edmx dopo l'eliminazione. Allora e solo allora prendi l'ultima e aggiungila di nuovo in un processo definito in due fasi. Altrimenti TFS viene confuso con l'eliminazione e la riaggiunta di entità identiche con nome che sembra causare problemi.


Ho avuto lo stesso problema dopo un cambio di tabella. Ho trovato le stesse entità con un numero 1 e 2 (MyEntity1, MyEntity2) in diversi punti sotto il modello. Ho cercato in ogni ramo (diagrammi, tipi di entità, ecc.) E ho rimosso ogni istanza di MyEntity e MyEntity [n]. Per buona misura ho fatto una "Soluzione pulita" e poi aggiornato dal database per aggiungere nuovamente solo MyEntity.
MsTapp

4

Un modo più rapido per me è stato eliminare le tabelle e aggiungerle nuovamente. Li ha mappati automaticamente. :)


2

Per coloro che utilizzano l' Database Firstapproccio, tutto ciò che devi fare dopo aver inserito una nuova entità è fare Generate Database From Modelnuovamente clic con il tasto destro sul .edmxfile e selezionareGenerate Database From Model...


0

Ho riscontrato questo errore quando avevo eliminato una tabella dal database. Risolto facendo clic con il pulsante destro del mouse sul diagramma EDMX, andando su Proprietà, selezionando la tabella dall'elenco nella finestra Proprietà ed eliminandola (utilizzando il tasto Canc) dal diagramma.


0
  1. Vai a Esplora soluzioni, fai clic sul pulsante Cerca
  2. Lascia spuntati entrambi Search within file contenteSearch External Files
  3. Digita il nome dell'entità che la tua mappatura non riconosce.
  4. Elimina tutti i file CORRELATI al problema. Probabilmente prenderanno il nome dalla stessa entità mancante. NON eliminare alcun file con il nome della classe di contesto sul file, specialmente se le loro estensioni sono .cs o .tt. Nel file Context .cs .
  5. rimuovere tutte le righe di codice che fanno riferimento all'entità mancante. Sembreranno così:

    public virtual DbSet< Entity1> Entity1 { get; set; }

Questo errore è comune alle tabelle eliminate dal database.

Quando si rilascia una tabella nel database, o si cambia semplicemente la web.config.connectionStringsper il database EF Mapped, il problema è puntare a una nuova e non quella utilizzata per generare le mappature originali.

È questo nuovo db queste entità con l'errore 3027 non sono presenti.


0

Ho avuto l'errore quando stavo cercando di creare un risultato personalizzato per una stored procedure e ho pensato che dovesse essere un'entità.

La soluzione è stata che ho appena creato un tipo complesso nel browser Modello e l'ho assegnato come risultato alla "Modifica funzione importa".

Lo aggiungerò qui poiché sembra che questa domanda sia dove ti porta Google quando ricevi questo errore.


0

Avevo impostato tutto correttamente (cardinalità e proprietà dipendenti) ma non riuscivo a capire perché continuo a ricevere errori. Alla fine ho capito che EF ha generato una colonna nella tabella dipendente da sola (table_tablecolumn) e non ha alcuna relazione con la tabella, quindi non è stata specificata alcuna mappatura. Ho dovuto eliminare la colonna nel file EDMX e ricostruire la soluzione che ha risolto il problema. Sto usando l'approccio DB.


0

Aggiorna modello dal database non funziona per me.

Ho dovuto rimuovere l'entità in conflitto, quindi eseguire Aggiorna modello dal database, infine ricostruire la soluzione. Dopodiché, tutto funziona bene.


0

Condividendo questo per altre persone. Nel mio caso, stavamo lavorando a una soluzione MVC condivisa e utilizzando un modulo comune per le tabelle che usiamo per i menu a discesa. Ho ricevuto l'errore quando ho aggiornato il modello Entity aggiungendo una nuova tabella. Si scopre che quando ho aggiornato l'EDMX, probabilmente ha aggiornato i miei diritti di accesso sul database, il che ha portato a non avere accesso a quella determinata tabella che mi dava no mapping specified.

Solo riaggiungendo e dando accesso al mio utente ha risolto il problema.


0

Penso di averlo ottenuto non eliminando esplicitamente alcune tabelle da edmx prima di rinominarle e aggiungerle nuovamente. Invece, ho semplicemente rinominato le tabelle e poi ho eseguito un aggiornamento del modello dal database, pensando che le avrebbe viste sparite e le avrei eliminate dal modello. Quindi ho fatto un altro modello di aggiornamento dal database e ho aggiunto le tabelle rinominate.

Il sito stava funzionando con le nuove tabelle, ma ho avuto l'errore. Alla fine, ho notato che le tabelle originali erano ancora nel modello. Li ho eliminati dal modello (fai clic su di essi nella schermata edmx, cancella il tasto), quindi l'errore è scomparso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.