Stiamo utilizzando Entity Framework 6.0.0 e usiamo il database prima (come questo) per generare codice da tabelle e stored procedure. Questo sembra funzionare alla grande, tranne che le modifiche nelle stored procedure non si riflettono quando si aggiorna o si aggiorna il modello. L'aggiunta di una colonna a una tabella si riflette, ma non aggiunge un campo a una stored procedure.
È interessante notare che se apro il Model Browser
, fai clic con il pulsante destro del mouse sulla procedura memorizzata, seleziona Add Function Import
e fai clic sul pulsante Get Column Information
sulle colonne per vedere le colonne corrette. Ciò significa che il modello conosce le colonne, ma non riesce ad aggiornare il codice generato.
C'è una soluzione alternativa, ovvero eliminare la stored procedure generata prima di aggiornare il modello. Ciò funziona fintanto che non hai apportato alcuna modifica alla stored procedure. Qualcuno sa di un modo per evitare questa soluzione alternativa?
Sto usando Visual Studio 2013
con tutti gli ultimi aggiornamenti a partire dall'inizio di dicembre 2013.
Grazie in anticipo!
Aggiornamento 1: la risposta di andersr ha aiutato in un caso, in cui la stored procedure utilizzava una tabella temporanea, quindi gli ho dato +1, ma non risolve ancora il problema principale dell'aggiornamento delle stored procedure semplici.
Aggiornamento 2: il commento di Shimron sotto link ad una domanda sugli stessi problemi in EF 3.5. Sembra lo stesso è ancora vero per EF 6.0. Leggilo per un modo alternativo di farlo, ma la mia conclusione fin d'ora è che il modo più semplice per farlo è eliminare la stored procedure generata prima di aggiornare il modello. Usa lezioni parziali se vuoi fare qualcosa di stravagante.
Sulla base di questa risposta di DaveD , questi passaggi risolvono il problema:
.edmx
, fai clic su rt e seleziona Browser modello . Le tue stored procedure restituiscono i dati dalle tabelle temporanee per caso? EF non sembra supportarlo, vedere EF4 - La stored procedure selezionata non restituisce colonne per ulteriori informazioni.
Tuttavia, la stored procedure osserverà come sarà disponibile nel Model Browser. Ho fatto un rapido test con lo scenario sopra descritto. La stored procedure è stata generata nella mia classe di contesto, ma il tipo restituito era un tipo int piuttosto che un tipo complesso . Vedere il link sopra per possibili soluzioni alternative.