Share via


Utilizzo del modello a oggetti di AdventureWorks (EDM)

Il codice utilizzato dall'applicazione client AdventureWorks dell'esempio seguente illustra diverse funzionalità di Entity Data Model (EDM). Gli schemi descritti negli argomenti precedenti relativi al modello di AdventureWorks costituiscono la base per le entità e le associazioni utilizzate dal codice in questa sezione.

I tipi progettati negli schemi e mappati all'archivio sono compilati come modello a oggetti programmabile. I dati in questo modello possono essere programmati utilizzando la sintassi CLR (Common Language Runtime) senza query SQL incorporate come stringhe nel codice.

Configurazione dell'applicazione

Per l'utilizzo del modello a oggetti, è necessaria una connessione al database in cui sono archiviati i dati dell'applicazione. È inoltre necessaria una connessione dell'entità agli oggetti di runtime forniti dalla DLL compilata dagli schemi.

Il file exe.config contiene una stringa di connessione utilizzata per connettersi a un database di SQL Server e per stabilire una connessione dell'entità. Dopo che è stata stabilita una connessione dell'entità, è possibile accedere alle entità e alle associazioni nel modello a oggetti dal codice.

Il testo della stringa di connessione deve essere aggiunto al file exe.config dallo sviluppatore.

L'assegnazione providerName="System.Data.EntityClient" specifica una connessione dell'entità che utilizza gli schemi e i mapping definiti negli schemi illustrati negli altri argomenti di questa sezione.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="AdventureworksContext" connectionString='Metadata=.;
            Provider=System.Data.SqlClient;
            Provider Connection String="server=.\sqlExpress;
            database=Adventureworks;
            Integrated Security=true;Connection Timeout=5;
            multipleactiveresultsets=true"'
            providerName="System.Data.EntityClient"/>
    </connectionStrings>
</configuration>
NoteNota

Questa stringa di connessione imposta i servizi MARS (Multiple Active Result Set) su true, come richiesto per richiamare il metodo Load sulle associazioni quando un altro lettore dati è già aperto nella stessa connessione.

Utilizzo di entità e associazioni di AdventureWorks

Nel codice seguente sono illustrate le query basate sulle entità e sulle associazioni definite negli schemi degli altri argomenti di questa sezione relativa ad AdventureWorks.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdventureWorks;
using System.Data.Objects;
using System.Data.EntityClient;
using System.Data.Metadata.Edm;
using System.Collections.ObjectModel;


namespace AdventureworksClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (AdventureWorksContext objCtx = new AdventureWorksContext())
            {
                // find first 50 employees and display data.
                foreach (Employee employee in
                    objCtx.Employee.Where("it.EmployeeID < 50"))
                {
                    Console.WriteLine("EmployeeID: {0}",
                                              employee.EmployeeID);

                    // Find employee job candidate and print resume.
                    employee.JobCandidate.Load();
                    foreach (JobCandidate jc in employee.JobCandidate)
                        Console.WriteLine("\tJobCandidate: {0} \n\t{1}",
                            jc.JobCandidateID, jc.Resume);


                    // Find manager of employee and display.
                    if (null != employee.Employee2)
                    {
                        employee.Employee2.Employee2Reference.Load();
                        Console.WriteLine("Employee: {0} Manager: {1}",
                             employee.EmployeeID.ToString(),
                             employee.Employee2.EmployeeID.ToString());
                    }

                }

                // Employees IDs 1 - 290. 
                // Find first 50 with contact information.
                foreach (Contact contact in
                     objCtx.Contact.Where("it.ContactID < 50"))
                {
                    Console.WriteLine("Contact: {0} {1} {2}",
                        contact.ContactID, contact.FirstName,
                        contact.LastName);

                    foreach (EmployeeAddress emplAddress in
                                          objCtx.EmployeeAddress)
                    {
                        if (emplAddress.EmployeeID.Equals(contact.ContactID))
                        {
                            ObjectParameter param = new
                            ObjectParameter("p",
                                emplAddress.AddressID);
                            Address address =
                                objCtx.Address.Where(
                               "it.AddressID = @p",
                                param).First();

                            Console.WriteLine(
                              "\tEmployee address: {0}\n\t{1}\n\t{2}",
                              address.AddressLine1,
                              address.City, address.PostalCode);
                        }
                    }
                }

                // Find and display vendors.
                foreach (Vendor vendor in objCtx.Vendor)
                    Console.WriteLine("Vendor: {0}", vendor.Name);

                // Find and display store information.
                foreach (Store store in objCtx.Store)
                    Console.WriteLine("Store: {0}", store.Name);


                // Find and display product information.
                foreach (Product product in objCtx.Product)
                {
                    Console.WriteLine("Product Name: {0}", product.Name);
                    product.ProductModelReference.Load();
                    if (null != product.ProductModel)
                    {
                        Console.WriteLine("Model: {0}",
                            product.ProductModel.ProductModelID.ToString());
                    }
                }
            }

            try
            {
                // Establish a connection to the underlying data provider by 
                // using the connection string specified in the config file.
                using (EntityConnection connection =
                    new EntityConnection("Name=AdventureWorksContext"))
                {
                    // Open the connection.
                    connection.Open();

                    // Access the metadata workspace.
                    MetadataWorkspace workspace =
                       connection.GetMetadataWorkspace();

                    // To run DisplayProperties(workspace, DataSpace.CSpace);
                    // to display the extended properties in the conceptual model.
                    // see Extended Property (CSDL) (link under See Also).
                }
            }
            catch (System.Data.MetadataException exceptionMetadata)
            {
                Console.WriteLine("MetadataException: {0}",
                                exceptionMetadata.Message);
            }
            catch (System.Data.MappingException exceptionMapping)
            {
                Console.WriteLine("MappingException: {0}",
                                 exceptionMapping.Message);
            }

        }

        
    }
}

Vedere anche

Concetti

Proprietà estesa (CSDL)

Altre risorse

Specifiche EDM
Specifica di schemi e mapping (Entity Framework)
Applicazioni di esempio (Entity Framework)