Introduzione con Entity Framework 4.0 Database First e ASP.NET 4 Web Forms
di Tom Dykstra
L'applicazione Web di esempio Contoso University illustra come creare applicazioni Web Forms ASP.NET usando Entity Framework 4.0 e Visual Studio 2010. L'applicazione di esempio è un sito Web per un'università contoso fittizia. Include funzionalità, come ad esempio l'ammissione di studenti, la creazione di corsi e le assegnazioni di insegnati.
L'esercitazione mostra esempi in C#. L'esempio scaricabile contiene codice sia in C# che in Visual Basic.
Database First
Esistono tre modi per usare i dati in Entity Framework: Database First, Model First e Code First. Questa esercitazione è per Database First. Per informazioni sulle differenze tra questi flussi di lavoro e indicazioni su come scegliere la soluzione migliore per lo scenario, vedere Flussi di lavoro di sviluppo di Entity Framework.
Web Form
Questa serie di esercitazioni usa il modello di Web Forms ASP.NET e presuppone che si sappia come usare Web Forms ASP.NET in Visual Studio. In caso contrario, vedere Introduzione con ASP.NET 4,5 Web Forms. Se si preferisce usare il framework MVC ASP.NET, vedere Introduzione con Entity Framework usando ASP.NET MVC.
Versioni software
Illustrato nell'esercitazione Funziona anche con Windows 7 Windows 8 Visual Studio 2010 Visual Studio 2010 Express for Web. L'esercitazione non è stata testata con versioni successive di Visual Studio. Esistono molte differenze tra selezioni di menu, finestre di dialogo e modelli. .NET 4 .NET 4.5 è compatibile con le versioni precedenti con .NET 4, ma l'esercitazione non è stata testata con .NET 4.5. Entity Framework 4 L'esercitazione non è stata testata con versioni successive di Entity Framework. A partire da Entity Framework 5, EF usa per impostazione predefinita l'introdotto DbContext API
con EF 4.1. Il controllo EntityDataSource è stato progettato per usare l'APIObjectContext
. Per informazioni su come usare il controllo EntityDataSource con l'APIDbContext
, vedere questo post di blog.Domande
Se si hanno domande che non sono direttamente correlate all'esercitazione, è possibile pubblicarli nel forum ASP.NET Entity Framework, nel forum entity Framework e LINQ to Entities o StackOverflow.com.
Panoramica
L'applicazione che si creerà in queste esercitazioni è un semplice sito Web dell'università.
Gli utenti possono visualizzare e aggiornare le informazioni che riguardano studenti, corsi e insegnanti. Di seguito sono riportate alcune schermate create.
Creazione dell'applicazione Web
Per avviare l'esercitazione, aprire Visual Studio e quindi creare un nuovo progetto applicazione Web ASP.NET ASP.NET usando il modello applicazione Web ASP.NET :
Questo modello crea un progetto applicazione Web che include già un foglio di stile e pagine master:
Aprire il file Site.Master e modificare "My ASP.NET Application" in "Contoso University".
<h1>
Contoso University
</h1>
Trovare il controllo Menu denominato NavigationMenu
e sostituirlo con il markup seguente, che aggiunge le voci di menu per le pagine che verranno create.
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
IncludeStyleBlock="false" Orientation="Horizontal">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
<asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
<asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
<asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
<asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
<asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
<asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
<asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
</asp:MenuItem>
</Items>
</asp:Menu>
Aprire la pagina Default.aspx e modificare il Content
controllo denominato BodyContent
in questo modo:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Welcome to Contoso University!
</h2>
</asp:Content>
A questo punto è disponibile una semplice home page con collegamenti alle varie pagine che si creeranno:
Creazione del database
Per queste esercitazioni, si userà la finestra di progettazione dei modelli di dati entity Framework per creare automaticamente il modello di dati in base a un database esistente (spesso chiamato approccio di base al database ). Un'alternativa non descritta in questa serie di esercitazioni consiste nel creare manualmente il modello di dati e quindi generare script che creano il database (approccio model-first ).
Per il metodo database usato in questa esercitazione, il passaggio successivo consiste nell'aggiungere un database al sito. Il modo più semplice consiste nel scaricare prima il progetto che va con questa esercitazione. Fare quindi clic con il pulsante destro del mouse sulla cartella App_Data , scegliere Aggiungi elemento esistente e selezionare il file di database School.mdf dal progetto scaricato.
Un'alternativa consiste nel seguire le istruzioni riportate in Creazione del database di esempio dell'istituto di istruzione. Se si scarica il database o lo si crea, copiare il file School.mdf dalla cartella seguente alla cartella App_Data dell'applicazione:
%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
Questo percorso del file con estensione mdf presuppone che si usi SQL Server 2008 Express.
Se si crea il database da uno script, seguire questa procedura per creare un diagramma di database:
In Esploraserver espandere Connessioni dati, espandere School.mdf, fare clic con il pulsante destro del mouse su Diagrammi di database e scegliere Aggiungi nuovo diagramma.
Selezionare tutte le tabelle e quindi fare clic su Aggiungi.
SQL Server crea un diagramma di database che mostra tabelle, colonne nelle tabelle e relazioni tra le tabelle. È possibile spostare le tabelle in giro per organizzarle tuttavia.
Salvare il diagramma come "SchoolDiagram" e chiuderlo.
Se si scarica il file School.mdf con questa esercitazione, è possibile visualizzare il diagramma del database facendo doppio clic su SchoolDiagram in Diagrammi di database in Esplora server.
Il diagramma ha un aspetto simile al seguente (le tabelle potrebbero trovarsi in posizioni diverse rispetto a quanto illustrato qui):
Creazione del modello di dati entity Framework
È ora possibile creare un modello di dati entity Framework da questo database. È possibile creare il modello di dati nella cartella radice dell'applicazione, ma per questa esercitazione verrà inserito in una cartella denominata DAL (per Livello di accesso ai dati).
In Esplora soluzioni aggiungere una cartella di progetto denominata DAL (assicurarsi che sia sotto il progetto, non nella soluzione).
Fare clic con il pulsante destro del mouse sulla cartella DAL e quindi scegliere Aggiungi e Nuovo elemento. In Modelli installati selezionare Dati, selezionare il modello ADO.NET Modello di dati di entità , denominarlo SchoolModel.edmx e quindi fare clic su Aggiungi.
Viene avviata la Creazione guidata modello di dati di entità. Nel primo passaggio della procedura guidata, l'opzione Genera dal database è selezionata per impostazione predefinita. Fare clic su Avanti.
Nel passaggio Scegli connessione dati lasciare i valori predefiniti e fare clic su Avanti. Il database School viene selezionato per impostazione predefinita e l'impostazione di connessione viene salvata nel file Web.config come SchoolEntities.
Nel passaggio Della procedura guidata Scegli oggetti di database selezionare tutte le tabelle sysdiagrams
tranne (che è stata creata per il diagramma generato in precedenza) e quindi fare clic su Fine.
Al termine della creazione del modello, Visual Studio mostra una rappresentazione grafica degli oggetti Entity Framework (entità) corrispondenti alle tabelle di database. Come nel diagramma del database, la posizione dei singoli elementi potrebbe essere diversa da quella visualizzata in questa figura. È possibile trascinare gli elementi intorno per trovare la corrispondenza con la figura se si vuole.
Esplorazione del modello di dati entity Framework
È possibile notare che il diagramma delle entità è molto simile al diagramma del database, con un paio di differenze. Una differenza è l'aggiunta di simboli alla fine di ogni associazione che indica il tipo di associazione (le relazioni di tabella sono chiamate associazioni di entità nel modello di dati):
Un'associazione uno-a-zero-o-uno è rappresentata da "1" e "0..1".
In questo caso, un'entità
Person
può o meno essere associata a un'entitàOfficeAssignment
. Un'entitàOfficeAssignment
deve essere associata a un'entitàPerson
. In altre parole, un insegnante può o non essere assegnato a un ufficio e qualsiasi ufficio può essere assegnato a un solo insegnante.Un'associazione uno-a-molti è rappresentata da "1" e "*".
In questo caso, un'entità
Person
può avere o meno entità associateStudentGrade
. Un'entitàStudentGrade
deve essere associata a un'entitàPerson
.StudentGrade
le entità rappresentano effettivamente corsi registrati in questo database; se uno studente è iscritto a un corso e non esiste ancora un voto, laGrade
proprietà è Null. In altre parole, uno studente potrebbe non essere ancora iscritto in alcun corso, può essere iscritto in un corso o può essere iscritto a più corsi. Ogni voto in un corso iscritto si applica a un solo studente.Un'associazione molti-a-molti è rappresentata da "*" e "*".
In questo caso, un'entità
Person
può avere o meno entità associateCourse
e il contrario è true: un'entitàCourse
può o meno avere entità associatePerson
. In altre parole, un insegnante può insegnare più corsi e un corso può essere insegnato da più insegnanti. (In questo database, questa relazione si applica solo agli insegnanti; non collega gli studenti ai corsi. Gli studenti sono collegati ai corsi in base alla tabella StudentGrades.
Un'altra differenza tra il diagramma di database e il modello di dati è la sezione proprietà di navigazione aggiuntive per ogni entità. Una proprietà di navigazione di un'entità fa riferimento a entità correlate. Ad esempio, la Courses
proprietà in un'entità Person
contiene una raccolta di tutte le Course
entità correlate a tale Person
entità.
Un'altra differenza tra il database e il modello di dati è l'assenza della CourseInstructor
tabella di associazione usata nel database per collegare le Person
tabelle e Course
in una relazione molti-a-molti. Le proprietà di navigazione consentono di ottenere entità correlate Course
dall'entità Person
e dalle entità correlate Person
dall'entità Course
, pertanto non è necessario rappresentare la tabella di associazione nel modello di dati.
Ai fini di questa esercitazione, si supponga che la FirstName
colonna della Person
tabella contenga effettivamente il nome e il secondo nome di una persona. Si vuole modificare il nome del campo in modo che corrisponda a questo, ma l'amministratore del database potrebbe non voler modificare il database. È possibile modificare il nome della FirstName
proprietà nel modello di dati, lasciando invariato l'equivalente del database.
Nella finestra di progettazione fare clic con il pulsante destro del mouse su FirstName nell'entità Person
e quindi scegliere Rinomina.
Digitare il nuovo nome "FirstMidName". In questo modo si fa riferimento alla colonna nel codice senza modificare il database.
Il browser del modello offre un altro modo per visualizzare la struttura del database, la struttura del modello di dati e il mapping tra di essi. Per visualizzarlo, fare clic con il pulsante destro del mouse su un'area vuota in Progettazione entità e quindi scegliere Browser modelli.
Nel riquadro Visualizzatore modelli viene visualizzata una visualizzazione albero. Il riquadro Visualizzatore modelli potrebbe essere ancorato al riquadro Esplora soluzioni. Il nodo SchoolModel rappresenta la struttura del modello di dati e il nodo SchoolModel.Store rappresenta la struttura del database.
Espandere SchoolModel.Store per visualizzare le tabelle, espandere Tabelle/Viste per visualizzare le tabelle e quindi espandere Course per visualizzare le colonne all'interno di una tabella.
Espandere SchoolModel, espandere Tipi di entità e quindi espandere il nodo Course per visualizzare le entità e le proprietà all'interno delle entità.
Nella finestra di progettazione o nel riquadro Visualizzatore modelli è possibile vedere in che modo Entity Framework correla gli oggetti dei due modelli. Fare clic con il pulsante destro del mouse sull'entità Person
e scegliere Mapping tabelle.
Verrà visualizzata la finestra Dettagli mapping . Si noti che questa finestra consente di vedere che la colonna FirstName
del database è mappata a FirstMidName
, che è ciò che è stato rinominato in nel modello di dati.
Entity Framework usa XML per archiviare informazioni sul database, sul modello di dati e sui mapping tra di essi. Il file SchoolModel.edmx è in realtà un file XML che contiene queste informazioni. La finestra di progettazione esegue il rendering delle informazioni in un formato grafico, ma è anche possibile visualizzare il file come XML facendo clic con il pulsante destro del mouse sul file con estensione edmx in Esplora soluzioni, scegliendo Apri con e selezionando Editor XML (testo). Progettazione modelli di dati e un editor XML sono solo due modi diversi per aprire e usare lo stesso file, pertanto non è possibile aprire la finestra di progettazione e aprire il file in un editor XML contemporaneamente.
È stato creato un sito Web, un database e un modello di dati. Nella procedura dettagliata successiva si inizierà a usare i dati usando il modello di dati e il controllo ASP.NET EntityDataSource
.