Share via


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'API ObjectContext . Per informazioni su come usare il controllo EntityDataSource con l'API DbContext , 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à.

Screenshot della home page di Contoso University, che mostra i collegamenti alle pagine Home, About, Students, Courses, Instructors e Departments.

Gli utenti possono visualizzare e aggiornare le informazioni che riguardano studenti, corsi e insegnanti. Di seguito sono riportate alcune schermate create.

Image30

Image37

Immagine31

Image32

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 :

Immagine01

Questo modello crea un progetto applicazione Web che include già un foglio di stile e pagine master:

Immagine02

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:

Screenshot della home page di Contoso University, che mostra i collegamenti alle pagine Home, About, Students, Courses, Instructors e Departments.

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:

  1. 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.

    Image35

  2. Selezionare tutte le tabelle e quindi fare clic su Aggiungi.

    Image36

    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.

  3. 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.

Image38

Il diagramma ha un aspetto simile al seguente (le tabelle potrebbero trovarsi in posizioni diverse rispetto a quanto illustrato qui):

Immagine04

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.

Immagine05

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.

Image06

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.

Immagine07

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.

Immagine08

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.

Immagine09

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".

    Image39

    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 "*".

    Image40

    In questo caso, un'entità Person può avere o meno entità associate StudentGrade . 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, la Grade 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 "*".

    Immagine41

    In questo caso, un'entità Person può avere o meno entità associate Course e il contrario è true: un'entità Course può o meno avere entità associate Person . 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à.

Immagine12

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.

Immagine11

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.

Immagine13

Digitare il nuovo nome "FirstMidName". In questo modo si fa riferimento alla colonna nel codice senza modificare il database.

Immagine29

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.

Image18

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.

Immagine26

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.

Immagine 19

Espandere SchoolModel, espandere Tipi di entità e quindi espandere il nodo Course per visualizzare le entità e le proprietà all'interno delle entità.

Immagine20

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.

Immagine21

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.

Immagine22

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 .