ADO.NET Entity Framework: l'aggiornamento guidato non aggiungerà tabelle


93

Ho aggiunto un nuovo ADO.Net Entity Data Model nel mio progetto e ho utilizzato la procedura guidata di aggiornamento per aggiungere tabelle al modello. Cinque delle tabelle selezionate sono state aggiunte all'area di progettazione. Altre due tabelle non verranno aggiunte. Li seleziono nella procedura guidata e faccio clic su Fine, ma non vengono mai visualizzati nell'area di progettazione.

È un bug o ci sono alcune situazioni in cui non è possibile aggiungere una tabella al modello (in base alla progettazione)?


AGGIORNAMENTO: XML (* .edmx) rivela il problema.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
Questo dovrebbe avere più voti. Non avevo idea che Visual Studio non potesse aggiungere la tabella poiché il file .edmx è l'unico posto in cui l'errore va effettivamente. Si spera che avranno una finestra di dialogo in v2!
John Bubriski

+1 - Nel mio caso, non è stato visualizzato alcun messaggio di errore.
teynon

Come hai notato, le tabelle che non sarebbero state importate non avevano chiavi primarie. Aggiungi un PK e sei a posto.
Eric,

Risposte:


46

La superficie di progettazione è diversa dal modello di entità. È possibile avere una tabella nella mappatura nel tuo EDMX che non appare nell'area di progettazione. Visualizza il file come XML per vedere se questo è il caso. In questo caso, la procedura guidata di aggiornamento non consentirà di aggiungere nuovamente le tabelle, poiché fanno già parte del modello di entità. Quindi, in generale, l'Aggiornamento guidato sa di più sul modello di entità di quanto non ne sappia sulla superficie di progettazione di per sé .

Non credo che sia esattamente la situazione in cui ti trovi, ma dovrebbe darti l'idea generale della soluzione: vai nell'XML e cerca i riferimenti alle tabelle in questione.


4
Ho appena avuto questo problema, ho eliminato una tabella dal modello e quando sono andato ad aggiungerla di nuovo il visual designer non l'ha mostrata come nel database. Per aggirare il problema ho cancellato il testo dal file .edmx, ma sono riuscito a rovinare l'XML. Se lo fai, esegui prima il backup del file, per ogni evenienza. Fortunatamente, sono riuscito a trovare il tag incasinato con git diff.
GrandMasterFlush

41

Impostare le chiavi primarie su tutte le tabelle o solo una casella di controllo deselezionata "Consenti null" su qualsiasi colonna di ciascuna tabella. Per me funziona :)


2
Questa credo sia la risposta corretta, almeno lo era per me. Grazie!
Eric,

@ Parvinder, ho lottato per questo problema nella maggior parte del mio progetto. Alla fine, la tua risposta mi ha chiarito tutto. Nel mio caso la tabella In Joining non ho specificato il campo Chiave non nulla o solo la chiave primaria. Dopo aver risolto questo problema, ho avuto la pace della mente. Grazie mille
PatsonLeaner

Quello che ho capito con la risoluzione è che non possiamo aggiungere una tabella in Entity Model se i) quella tabella non ha una chiave primaria o (ii) non c'è la colonna Allow Null in quella tabella.
Murtuza Khan

10

1.Modificare la struttura della tabella e aggiungere una colonna principale. Aggiorna il modello.

2.Modifica il file .EDMX nell'editor XML e prova ad aggiungere una nuova colonna sotto il tag per questa tabella specifica. (NON FUNZIONERÀ)

3.Invece di creare una nuova colonna primaria per uscire dalla tabella, creerò una chiave composta coinvolgendo tutte le colonne esistenti. (LAVORATO)

Entity Framework: aggiunta di DataTable senza chiave primaria al modello di entità.


Mi sono imbattuto in questo stesso problema. Il modello di entità stava aggiungendo la tabella, tuttavia, non veniva visualizzata nel designer. Inoltre non ho potuto accedervi in ​​codice. Ho aggiunto un campo ID Chiave ... ha funzionato!
Ravi Ram

6

Anch'io ho avuto questo problema, tutto quanto sopra non ha funzionato per me. Ciò che mi ha aiutato è stato il seguente.

Quando si tenta di connettersi a un database, tale database può avere utenti diversi con credenziali diverse che può accettare. Diciamo che l'utente A fino a D.

Se provi a connetterti con un utente assicurati che l'utente abbia le credenziali corrette abilitate, in questo caso, le opzioni di lettura e scrittura abilitate.

Per fare ciò avvia MS SQL Server Managment Studio, collegati al tuo server SQL e seleziona il database con cui provi a connetterti in Visual Studio. Sotto "your_dbname" -> Sicurezza -> Utenti trovi un elenco di utenti. Fare clic con il pulsante destro del mouse sul nome utente con cui si tenta di accedere e selezionare le proprietà. Si apre una finestra. Seleziona la pagina "Generale" (selezionata per impostazione predefinita) e nella scheda "Appartenenza al ruolo del database" assicurati che "db_datareader" e "db_datawrite" siano selezionati.

Nota: quando accedi anche a MS SQL Server Managment Studio assicurati di accedere con un utente che possa abilitare / disabilitare queste opzioni ...


5

Verificare la presenza di "Null" nella tabella specifica. Se tutte le colonne sono impostate su "Consenti null", Entity Framework lo considera una tabella "Null". Ho avuto lo stesso problema e ho deselezionato "Consenti null" e ha aggiunto la tabella richiesta.


1
Funziona, stupido nessun errore né avviso appare nei log!
RolandoCC


1

La mia soluzione a questo è eliminare l'intero modello e leggerlo includendo le nuove tabelle che desidero.

Ho cancellato accidentalmente una tabella nel designer una volta e non sono riuscito a leggerlo. Quindi rimuovere l'intero modello e leggerlo.

Ho avuto alcuni problemi anche con questo ( Ado.Net Entity Data Model non si aggiorna correttamente )


1

Questo problema è stato risolto nell'ultima versione (ambiente: VS 2012, .net framework 4.5). Apri semplicemente il file .edmx e aggiungi le tabelle / stored procedure / viste richieste. La tabella / vista che non ha la chiave primaria verrà creata come tabella / vista di sola lettura.

La tabella / vista "TABLE_NAME" non ha una chiave primaria definita. La chiave è stata dedotta e la definizione è stata creata come tabella / vista di sola lettura.


1
l'errore rimane in alcuni casi comunque evento in EF 5.0
Greg Z.

0

Non è necessario eliminare l'intero modello (potrebbero essere centinaia di tabelle!).

La procedura guidata può gestire "l'aggiunta di nuovi" elementi, ma alcune modifiche come la modifica delle chiavi composite e la ridenominazione delle colonne - non sa cosa fare - quindi non ci prova - e le cose perdono la sincronizzazione.

COSÌ: ELIMINA le tabelle in questione dal Modello (modalità concettuale) E dal Model.Store, quindi aggiorna il modello utilizzando la procedura guidata e aggiungi nuovamente solo le tabelle in questione.


0

Sto solo buttando fuori qualche dettaglio in più per chiunque non abbia dovuto farlo prima. Sto usando Visual Studio 2013 con l'aggiornamento 4 installato. Ho aggiunto alcuni campi a una tabella, ho eliminato la tabella dal mio modello, quindi sono andato ad aggiornare e non mi ha permesso di controllare nessuna delle tabelle.

Ho una chiave primaria.

Ho creato una nuova tabella di test, che è apparsa e mi avrebbe permesso di controllarla ma non quella originale.

Non l'ho mai aperto in XML prima e non sapevo come farlo. Fai clic destro sul file .edmx e "apri con" - scegli l'editor xml.

il tavolo in questione era lì eccome, aveva anche i nuovi campi (strano).

Ho cancellato tutti i riferimenti ad esso (ci sono voluti un paio di volte) - dopo averne eliminato uno e salvato, se provi ad aprirlo e non viene visualizzato, vai avanti e scegli "Visualizza XML" - guarda gli errori e fondamentalmente segui la palla che rimbalza finché non l'hai pulita.

spero che i dettagli in più aiutino qualcuno.

Joe


0

Un modo semplice che ho trovato è stato quello di (in SQL Server Management Studio) aggiungere una colonna ID di tipo INT, deselezionare "Consenti valori nulli" e in Proprietà colonna (di ID) >> Specifica identità >> controllare (È identità) e fare certo l'incremento è impostato.

Una volta fatto quanto sopra, torna alla finestra .edmx, fai clic con il pulsante destro del mouse e Aggiorna modello dal database.


0

È possibile aggiungere una tabella incrociata di colonne chiave primaria. Quindi il problema si risolve

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.