giovedì 8 marzo 2012

Un primo EF Codice Tutorial

Entity Framework è stata l'ultima parola d'ordine nel cerchio di sviluppo Microsoft dopo il rilascio di Visual Studio 2010.Con il rilascio di Entity Framework 4.1 in aprile 2011, EF è diventata ancora più utile con l'introduzione del primo codice.EF è un (Object Relational Mapping) ORM framework che astrae i dettagli della struttura del database dall'applicazione attraverso l'uso di un modello.
Il primo passo per lavorare con un database è quello di creare il database. EF permette che ciò accada in tre modi:
  • Prima Database: Importazione di un database esistente nel Modello EF
  • Primo Modello: Creazione del modello e utilizzarlo per generare il database
  • Codice Primo: utilizzo di classi di codice per generare il database

Questo tutorial si concentra su No. 3. Come molti argomenti tecnici, il modo migliore per spiegare il primo codice è quello di dimostrarlo.

[Clicca sull'immagine per ingrandirla.]
Figura 1. Creazione del nuovo progetto.
1. Installare EF 4,1 da http://bit.ly/oFL43y
2. Creare l'applicazione
  • Avviare Visual Studio 2010
  • Fare clic su File / Nuovo / Progetto ...
  • Scegliere Windows dal pannello di sinistra e Applicazione Windows Form, come illustrato nella figura 1 . Nota: in questo esempio, io utilizzare i modelli di Visual Basic nel riquadro di sinistra, un modello simile è disponibile in Visual C #.
  • Inserire "CodeFirstApp" come il nome e fare clic su "OK".
3. creare il modello
successivo, ho intenzione di creare una libreria separata classe ( Figura 2 ), chiamato DataAccess. Questo verrà utilizzato per creare la struttura del database iniziale e la successiva connessione dati successivamente nella demo.Utilizzando un progetto separato per questi compiti aderire al concetto di SoC (separazione degli interessi).

[Clicca sull'immagine per ingrandirla.]
Figura 2. Creazione della libreria di classi
Per ulteriori puntualità, ho intenzione di rinominare Form1.vb a frmMain.vb e Class1.vb a DataBaseStruct.vb, come mostrato in Figura 3 .

[Clicca sull'immagine per ingrandirla.]
Figura 3. Rinominare Form1.vb e Class1.vb.
Riferimenti
Oltre ai riferimenti di default caricati nel modello di progetto, ho aggiunto un riferimento a "EntityFramework" (EntityFramework.dll) per entrambi i progetti. Ho anche aggiunto un riferimento al progetto "DataAccess" dal progetto "CodeFirstApp".
Definire il Database
Con tutto a posto, posso iniziare a creare la struttura del database in DataBaseStruct.vb. Primo codice utilizza le classi e le proprietà per identificare le tabelle e le colonne, rispettivamente. Per questo esempio, sarò con una struttura semplice database chiamato "Trasporti" con due tabelle: Mezzi di trasporto e VehicleTypes, con un uno-a-uno.
Per prima cosa definire la struttura della tabella per la tabella Vehicle definendo come una classe con quattro proprietà:
  • VehicleID Come Int32
  • Fai As String
  • Modello As String
  • VehicleType Come VehicleType
EF ha riconosciuto che la proprietà prima contiene l'ID nel nome e subito impostato come chiave primaria per quel tavolo. Dal momento che è una chiave primaria, si è automaticamente impostato per essere Not Null. Proprietà Marca e modello sono stati definiti come un tipo String senza una dimensione, quindi, EF li impostato nvarchar (max), null nel database.
Quest'ultima proprietà è chiamato VehicleType, e viene utilizzato come una chiave esterna alla tabella VehicleType. Nota questo campo è di tipo "VehicleType" (la struttura della tabella a cui punta). Il VehicleType (singolare) sarà utilizzato per costruire le VehicleTypes (plurale) della tabella.
La stessa logica vale per la costruzione della tabella VehicleTypes. Tre proprietà sono definite in questa tabella:
  • VehicleTypeID Come Int32
  • Nome As String
  • Descrizione As String
Con tutte le proprietà definite nelle loro rispettive classi, che ora possono essere dichiarate come collezioni e utilizzato per definire la struttura della tabella:
Public Class TransportationDB
    Inherits DbContext


         Veicoli di proprietà pubblica () As DbSet (del veicolo)
         VehicleTypes proprietà pubblica (As) DbSet (di VehicleType)


End Class
Notate le tabelle vengono definite utilizzando le collezioni DbSet. DbSet è stato introdotto nel EF 4,1 come un oggetto wrapper ObjectSet. Questo oggetto viene utilizzato per tutte le operazioni CRUD contro il tavolo. Anche in EF 4.1, Microsoft introducted DbContext. Questo oggetto è un wrapper per l'oggetto ObjectContext, astraendo la complessità: è il metodo preferito per interagire con il database. Per questo motivo, la classe che definisce la struttura del database sarà ereditare la classe DbContext. Sia DbSet e DbContext sono definiti nello spazio dei nomi System.Data.Entity.
La figura 4 mostra un elenco completo del DataBaseStruct.vb.

[Clicca sull'immagine per ingrandirla.]
Figura 4. DataBaseStruct.vb.
4. Implementare e popolare il database
In questa fase, la struttura del database è completamente definito come un "primo codice" modello, ma non è stato implementato sul server. Per questo esempio io utilizzare un semplice modulo e inserire la logica del "Crea Database" gestore del pulsante dell'evento, che può essere visto in Figura 5 .

[Clicca sull'immagine per ingrandirla.]
Figura 5. Implementazione primo codice sul server tramite un pulsante.
Per distribuire e popolare il database, basta istanziare le classi create, compilare i campi dei dati ed eseguire SaveChanges () sull'oggetto contesto del database. Il codice completo da frmMain.VB è mostrato in Figura 6 .

[Clicca sull'immagine per ingrandirla.]
Figura 6. frmMain.vb.
La tabella VehicleTypes farà riferimento alla tabella del veicolo, quindi ha bisogno di essere popolato prima. Nota: la prima chiamata a context.SaveChanges () sulla linea 20 verrà creato il database e inserire il record VehicleType.Passando alla riga 23, l'oggetto viene creata un'istanza del veicolo e associato al record precedentemente inserito.
Per impostazione predefinita, DbContext creerà il database su localhost \ SQLExpress. Il nome del database predefinito seguirà il nome completo (Namespace.ObjectName) dell'oggetto DbContext derivata. In questo esempio, il nome del database è "DataAccess.TransportationDB".

[Clicca sull'immagine per ingrandirla.]
Figura 7. Il database risultante.
Guardando SQL Server Management Studio, figura 7, i, le tabelle di database e le colonne sono implementati per i nomi degli oggetti definiti in DataBaseStruct.vb.
Annotazioni di dati
Se si guarda più da vicino l'implementazione del database rispetto alle classi definite in DataBaseStruct.vb, vedrete il risultato di utilizzare le annotazioni di dati sulla classe. Utilizzando <Table("VehicleTable")> sulla classe Vehicle consentito la tabella per essere chiamato "VehicleTable" nel database, ma era ancora accessibile facendo riferimento alla classe Vehicle.
Allo stesso modo, <Column("MakeOfCar")> permesso la colonna nel database per essere chiamato "MakeOfCar" mentre è stato fatto riferimento in codice come "Make". Questi attributi e molti altri si trovano nelle System.ComponentModel.DataAnnotations dello spazio dei nomi. Vantaggi del primo codice codice ha prima una serie di vantaggi. Innanzitutto, gli sviluppatori non sono più ritardate di non disporre di un database. È ora possibile creare la struttura del database e iniziare a programmare, con tutto mantenuto nella stessa soluzione. In secondo luogo, non c'è codice generato automaticamente, uno sviluppatore ha il pieno controllo di ciascuna delle classi. Infine, tutto è mantenuto semplice nel livello di accesso ai dati, perché non c'è. Modello EDMX di aggiornare o mantenere.

Nessun commento:

Posta un commento