Quando creo un modello utilizzando l'approccio "Database First" nel mio progetto ASP.NET MVC 5, non tutte le mie tabelle da SQL Server vengono create nel mio progetto.
Ho seguito tutto in questo articolo passo dopo passo: https://www.asp.net/mvc/overview/getting-started/database-first-development/creating-the-web-application
Modello di progetto ASP.NET MVC:
Database SQL Server:
Ci sono tre tabelle dal mio database SQL Server che non sono state create nel modello. La tabella è AspNetUserRoles, ContactsAddresses e IssuesItems
Ecco i progetti per le tre tabelle mancanti:
AspNetUserRoles:
ContactsAddresses:
IssuesItems:
Tutte e tre le tabelle mancanti sono state create in SQL Server per eliminare da molte a molte relazioni e hanno tutte due chiavi primarie che connettono due tabelle.
Perché sta succedendo questo e cosa posso fare per risolverlo?
Grazie.
EF per convenzione evita di mappare le tabelle di giunzione che hanno solo colonne PK / FK. Si occuperà di gestire (popolare / consultare / etc) quelle tabelle per te. Se controlli, ad esempio, la tua entità Issue
, vedrai una proprietà collection di Type Item
.
public virtual ICollection<Item> Items{get;set;}
Lo stesso accade all'entità Item
e al resto delle tue entità.
Quando scrivi una query in cui è coinvolta una di queste proprietà di raccolta, EF genererà la corretta istruzione sql per te che coinvolge la tabella di giunzione, che ti aiuta ad attraversare quel ponte senza la necessità di scrivere codice aggiuntivo.
Ciò non significa che non sia possibile mappare queste tabelle in EF, infatti ci sono persone che raccomandano di evitare questo tipo di mappa delle relazioni per maggiore chiarezza e di essere più vicini a ciò che si fa normalmente in SQL. Ma per farlo dovrai saltare a Code First. È possibile, ad esempio, generare il modello utilizzando uno strumento come EF Power Tools o, in effetti, è possibile utilizzare il modello di dati di entità ADO.NET ma utilizzando Code First dall'opzione database anziché EF Designer dal database . Usando questi strumenti il tuo modello verrà generato come hai già fatto, ma puoi aggiungere classi per rappresentare le tue tabelle di giunzione e creare da una a molte relazioni tra loro e le entità coinvolge come nell'esempio in questo post del blog , ma IMHO preferisco EF prende cura quei tavoli per me.
Come quando ho cercato SO, sono arrivato a questa domanda e questa risposta potrebbe non essere completamente correlata alla domanda spiegata, ma per coloro che stanno cercando la risposta, perché non tutto il tavolo viene creato è
È necessario aggiungere un attributo chiave primaria per quella colonna specialmente se si ha una relazione con quella tabella.