2013-09-24 22 views
28

Ho diverse visualizzazioni aggiornabili in base a http://technet.microsoft.com/en-us/library/ms187956.aspx.Visualizzazioni aggiornabili in Entity Framework 5/6

Tutte le mie opinioni sono conformi alle specifiche dell'articolo succinto. Ho verificato in SQL Management Studio che le viste possono essere aggiornate, inserite e cancellate da.

Le ricerche che ho fatto mi ha portato a due opzioni per rendere il punto di vista della mia Entity Framework 5/6 Modello aggiornabile:

  1. rimuovere il tag da ogni vista, tuttavia, qualsiasi lavoro fatto in MyContext.edmx viene sovrascritto quando si aggiorna il contesto dal database . Ciò significa che questa soluzione non è molto praticabile per il mio progetto .

  2. Aggiunta di un inserimento, aggiornamento ed eliminare stored procedure per ogni vista e mappatura questi nella finestra di progettazione. Non mi piace particolarmente lo l'idea di dover creare questo molte stored procedure.

C'è un modo semplice per dire EF5 O EF6 che le opinioni possono essere aggiunti a/aggiornati/cancellati da quella non saranno spazzati via durante l'esecuzione successiva "Aggiorna modello dal database" comandi senza scrivere stored procedure per ogni metodo di inserimento (inserire, aggiornare, eliminare) su ogni vista?

risposta

7

Penso che il metodo più semplice sarebbe cambiare la definizione di EntitySet in StorageModel per dire che la consideri come una tabella, al contrario di una vista del database.

Guardando la definizione XML, in cui si dice

<EntitySet Name="Products" store:Type="Views" .. 

si cambia che a

<EntitySet Name="Products" store:Type="Tables" .. 

(Nota i "Prodotti" è solo un esempio) Questo dovrebbe essere nella vostra edmx file.
Vedere pg 44, Lerman, "Programming Entity Framework", 2nd Ed.

Spero che questo aiuti.

+0

Sembra che il codice di esempio sia mancante, ma ottengo quello che stai cercando di dire. Esaminerò il tuo suggerimento – puddinman13

+0

Il mio male - Non ho notato che le parentesi xml avrebbero fatto sparire il testo in quel modo. – JamesWHurst

+1

Dopo alcuni test questo viola uno dei miei vincoli, "non essere cancellato quando si eseguono i successivi comandi" Aggiorna modello dal database ". Quando si esegue un aggiornamento, la procedura guidata ritiene che la vista sia ora una tabella e richiede di aggiungere nuovamente la vista per poter ricevere le modifiche. Ho ignorato la richiesta e ho eseguito l'aggiornamento. Successivamente ricevo un errore che indica che la mia vista (convertita in una tabella) non è mappata e la vista che ho bisogno di mappare è ora mancante.Detto questo, ho anche ricevuto degli errori subito dopo averlo spostato da Type Views a Tables. – puddinman13

1

Penso che invece di utilizzare .edmx tu vada con classi basse e usi la classe dbcontext e modelbuilder per mappare il suo molto leggero o non sia aggiornato ogni volta che aggiorni il database. è molto efficiente e scalabile

Spero che possa essere d'aiuto.

0

È possibile ottenere la chiave primaria dalla vista e fare la vostra dichiarazione di aggiornamento utilizzando la chiave primaria. Solo un modo per aggirare.

+0

Buona idea, che funziona per me. – mhan0125