Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 APIintrodotta 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 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.
Gli utenti possono visualizzare e aggiornare le informazioni che riguardano studenti, corsi e insegnanti. Verranno mostrate di seguito alcune delle schermate che creerai.
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 :
Questo modello crea un progetto di 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 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:
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:
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.
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 per organizzarle come preferisci.
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.
Il diagramma è simile al seguente (le tabelle potrebbero trovarsi in posizioni diverse rispetto a quanto illustrato di seguito):
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.
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.
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.
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.
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.
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".
In questo caso, un'entità
Personpuò essere associata o meno a un'entitàOfficeAssignment. Un'entitàOfficeAssignmentdeve 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à
Personpuò avere o meno entità associateStudentGrade. Un'entitàStudentGradedeve essere associata a un'entitàPerson.StudentGradele entità rappresentano effettivamente corsi registrati in questo database; se uno studente è iscritto a un corso e non esiste ancora un voto, laGradeproprietà è 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 "*".
In questo caso, un'entità
Personpuò avere o meno entità associateCoursee il contrario è vero: un'entitàCoursepuò avere o meno entità associatePerson. 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à.
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.
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.
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 visualizzarla, fare clic con il pulsante destro del mouse su un'area vuota in Entità Designer e quindi fare clic su 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à, quindi espandere il nodo Course per visualizzare le entità e le proprietà all'interno delle entità.
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.
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.
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.