Operazioni CRUD con EF6 e MVC5

Scrivere operazioni CRUD di base è molto semplice se utilizziamo  Entity Framework 6 e la sua desinenza “Database First” in accoppiata alle fuzionalità di scaffolding di MVC 5 che ci evitano di scrivere una riga di codice.

Per applicare la modalità “Database First” Visual Studio 2013, anche versione Express per Web, offre un comodo designer per generare un data model completo di classi con proprietà a partire dallo schema di un database con le relative tabelle e relazioni, il tutto salvato in un file xml avente estensione .edmx.

Per la creazione del database possiamo utilizzare un DbLocal creando un progetto Database Project:

DataDB

il quale si presenterà come un progetto vuoto dove potremo aggiungere le tabelle del nostro database e uno script di post deployment che ci permetterò di aggiungere dei dati di test per il nostro database dopo aver fatto il deploy del progetto, attraverso l’esecuzione del progetto, che si occuperà della creazione del database.

MERGE INTO Category AS Target
USING (VALUES 
        (1, 'PRI'), 
        (2, 'PEN')
)
AS Source (IdCategoria, Descrizione)
ON Target.IdCategoria = Source.IdCategoria
WHEN NOT MATCHED BY TARGET THEN
INSERT (IdCategoria, Descrizione)
VALUES (IdCategoria, Descrizione);

MERGE INTO Contracts AS Target 
USING (VALUES 
        (1,GETDATE(), GETDATE(), 1)
) 
AS Source (IdContratto,DataContratto,DataScadenza,IdCategoria) 
ON Target.IdContratto = Source.IdContratto 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (IdContratto,DataContratto,DataScadenza,IdCategoria) 
VALUES (IdContratto,DataContratto,DataScadenza,IdCategoria);

MERGE INTO Customers AS Target 
USING (VALUES 
        (1,'MRORSS69E27H501L', 'MARIO','ROSSI', '1969-05-27','M')
) 
AS Source (IdContratto,CodiceFiscale,Nome,Cognome,DataNascita,Sesso) 
ON Target.CodiceFiscale = Source.CodiceFiscale 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (IdContratto,CodiceFiscale,Nome,Cognome,DataNascita,Sesso) 
VALUES (IdContratto,CodiceFiscale,Nome,Cognome,DataNascita,Sesso);

N.B. attenzione che ogni qualvolta eseguite il progetto lo script post deploy viene eseguito

Di seguito la struttura del progetto dopo aver aggiunto le tabelle e lo script di deploy

DataDBProject

Dal Sql Server Objects Explorer possiamo notare la struttura del database creato nel database server locale, in questo caso (localdb)ProjectsV12:

SqlServerObjectExplorer

A questo punto siamo pronti per creare la nostra applicazione web MVC 5 per lo scopo prefissato. Una volta creata la soluzione si dovrà scaricare, tramite Nuget, Entity Framework giunto alla versione 6.1, in questo modo sarà possibile creare un modello dati sulla base del database appena creato. Per far questo aggiungiamo nella cartella Model un file di tipo .edmx

BankDataModel

alla finestra successiva scegliamo di farci creare la nostra classe model dal database, quindi definiamo la stringa di connessione e via via gli altri parametri .

BankDataDesigner

Connection

Quindi scegliamo le tabelle che saranno le nostre entità e salviamo la nostra classe model con un namespace a piacere

EDMX

La nostra solution conterrà adesso diversi file in più mentre in automatico apparirà il designer di EF con le classi appena create.

modello

In particolare la classe BankDataModelContext, che eredita dalla classe DbContext , fornisce una proprietà di tipo DbSet per ogni modello collegato alle tabelle scelte per la generazione. Prima di proseguire dobbiamo effettuare la build del progetto altrimenti per la prossima attività di creazione automatica del codice CRUD in seguito alla attività di scaffolding che faremo non otterremo nulla.

I passaggi per terminare l’attività sono semplici e si possono riassumere nel seguente modo:

  • aggiungere un controller di tipo Scaffolded come da esempio:

image

  • nella maschera successiva proseguire :

Scaffold

  • quindi scegliere la classe che fungerà da controller presa dal datacontext appena generato

AddController

Ripetere l’operazione per tutte le classi per cui si devono fare operazioni CRUD, nel nostro caso Customers e Category e otterremo una solution del genere:

                 Views                                       controllers

  Come possiamo vedere all’interno dei controllers troviamo tutte le operazioni CRUD sul model scelto, inoltre è stata creata per noi la view corrispondente, non ci rimane che agganciarle al nostro menu

@Html.ActionLink("Contracts", "Index", "Contracts")
@Html.ActionLink("Customers", "Index", "Customers")
@Html.ActionLink("Categories", "Index", "Categories")

Siamo pronti per lavorare!

Annunci

Informazioni su pythonyan

.Net Solution Developer at Be Smart
Questa voce è stata pubblicata in MVC e contrassegnata con , . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...