Condividi tramite


Introduzione a Database First di Entity Framework 4.0 e a Web Forms di ASP.NET 4

di Tom Dykstra

L'applicazione Web di esempio Contoso University illustra come creare ASP.NET applicazioni Web Form usando Entity Framework 4.0 e Visual Studio 2010. L'applicazione di esempio è un sito Web per un'università fittizia di Contoso. 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 è relativa a Database First. Per informazioni sulle differenze tra questi flussi di lavoro e indicazioni su come scegliere quella migliore per lo scenario, vedere Flussi di lavoro di sviluppo di Entity Framework.

Moduli Web

Questa serie di esercitazioni usa il modello Web Form ASP.NET e presuppone che si sappia come usare ASP.NET Web Form in Visual Studio. In caso contrario, vedere Introduzione a ASP.NET Web Form 4.5. Se si preferisce usare il framework MVC ASP.NET, vedere Introduzione a Entity Framework con ASP.NET MVC.

Versioni del 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 le versioni successive di Visual Studio. Esistono molte differenze nelle selezioni di menu, nelle finestre di dialogo e nei modelli.
.NET 4 .NET 4.5 è retrocompatibile con .NET 4, ma l'esercitazione non è stata testata con .NET 4.5.
Entity Framework 4 L'esercitazione non è stata testata con le versioni successive di Entity Framework. A partire da Entity Framework 5, Entity Framework usa per impostazione predefinita l'istanza DbContext API introdotta 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 non direttamente correlate all'esercitazione, è possibile pubblicarle nel forum di Entity Framework ASP.NET, nel forum di Entity Framework e LINQ to Entities o StackOverflow.com.

Informazioni generali

L'applicazione che verrà creata in queste esercitazioni è un semplice sito Web universitario.

Screenshot della home page di Contoso University, che mostra i collegamenti alle pagine Home, Informazioni, Studenti, Corsi, Docenti e Dipartimenti.

Gli utenti possono visualizzare e aggiornare le informazioni che riguardano studenti, corsi e insegnanti. Verranno mostrate di seguito alcune delle schermate che creerai.

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 usando il modello applicazione Web ASP.NET :

Immagine01

Questo modello crea un progetto di 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 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>

È ora disponibile una semplice home page con collegamenti alle varie pagine che verranno create:

Schermata della home page di Contoso University, che presenta i collegamenti alle pagine Inizio, Informazioni, Studenti, Corsi, Docenti e Dipartimenti.

Creazione del database

Per queste esercitazioni, utilizzerai il Progettista di modelli di dati di Entity Framework per creare automaticamente il modello di dati basato su un database esistente (spesso definito approccio database-first). Un'alternativa non illustrata 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-first usato in questa esercitazione, il passaggio successivo consiste nell'aggiungere un database al sito. Il modo più semplice consiste nel scaricare prima di tutto il progetto che include questa esercitazione. Fare quindi clic con il pulsante destro del mouse sulla cartella App_Data , selezionare 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. Indipendentemente dal fatto che il database venga scaricato o creato, copiare il file School.mdf dalla cartella seguente nella cartella App_Data dell'applicazione:

%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

Questo percorso del file .mdf presuppone che si stia usando SQL Server 2008 Express.

Se si crea il database da uno script, seguire questa procedura per creare un diagramma di database:

  1. In Esplora server espandere Connessioni dati, espandere School.mdf, fare clic con il pulsante destro del mouse su Diagrammi di database e selezionare 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 per organizzarle come preferisci.

  3. Salvare il diagramma come "SchoolDiagram" e chiuderlo.

Se si scarica il file di School.mdf incluso in questa esercitazione, è possibile visualizzare il diagramma di database facendo doppio clic su SchoolDiagram in Diagrammi di database in Esplora server.

Image38

Il diagramma è simile al seguente (le tabelle potrebbero trovarsi in posizioni diverse rispetto a quanto illustrato di seguito):

Image04

Creazione del modello di dati di Entity Framework

È ora possibile creare un modello di dati di 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 nel 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 Entity Data Model , denominarlo SchoolModel.edmx e quindi fare clic su Aggiungi.

Image05

Verrà avviata la Creazione guidata del modello di dati 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 è selezionato per impostazione predefinita e l'impostazione di connessione viene salvata nel file Web.config come SchoolEntities.

Image07

Nel passaggio della procedura guidata Scelta oggetti di database, selezionare tutte le tabelle ad eccezione di sysdiagrams (creata per il diagramma generato in precedenza) e quindi fare clic su Fine.

Image08

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 di database, la posizione dei singoli elementi potrebbe essere diversa da quella visualizzata in questa illustrazione. È possibile trascinare gli elementi intorno per trovare la corrispondenza con l'illustrazione, se necessario.

Image09

Esplorazione del modello di dati di Entity Framework

È possibile notare che il diagramma di entità è molto simile al diagramma di 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 tra tabelle sono denominate associazioni di entità nel modello di dati):

  • Un'associazione uno-a-zero-o-uno viene rappresentata con "1" e "0..1".

    Image39

    In questo caso, un'entità Person può essere associata o meno 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 registrato in più corsi. Ogni voto di un corso si applica a un solo studente.

  • Un'associazione molti-a-molti è rappresentata da "*" e "*".

    Image41

    In questo caso, un'entità Person può avere o meno entità associate Course e il contrario è vero: un'entità Course può avere o meno entità associate Person. In altre parole, un insegnante può insegnare più corsi e un corso può essere insegnato da più istruttori. (In questo database, questa relazione si applica solo agli insegnanti; non collega gli studenti ai corsi. Gli studenti sono collegati ai corsi dalla tabella StudentGrades.

Un'altra differenza tra il diagramma di database e il modello di dati è la sezione proprietà di spostamento 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à.

Image12

Un'altra differenza tra il database e il modello di dati è l'assenza della tabella di associazione CourseInstructor utilizzata nel database per collegare le tabelle Person 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.

Image11

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 rifletta questa impostazione, ma l'amministratore del database potrebbe non voler modificare il database. È possibile modificare il nome della FirstName proprietà nel modello di dati, lasciando invariato il relativo database equivalente.

Nella finestra di progettazione fare clic con il pulsante destro del mouse su FirstName nell'entità Person e quindi scegliere Rinomina.

Image13

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

Image29

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 visualizzarla, fare clic con il pulsante destro del mouse su un'area vuota in Entità Designer e quindi fare clic su 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.

Image19

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

Image20

Nella finestra di progettazione o nel riquadro Browser modelli è possibile vedere in che modo Entity Framework mette in relazione gli oggetti dei due modelli. Fare clic con il pulsante destro del mouse sull'entità Person e scegliere Mappatura tabella.

Image21

Apre la finestra Dettagli Mappatura. Si noti che questa finestra consente di vedere che la colonna FirstName del database è mappata a FirstMidName, ovvero a ciò che è stato rinominato nel modello di dati.

Image22

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, quindi 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 lavorare con i dati utilizzando il modello di dati e il controllo ASP.NET EntityDataSource.