Partager via


Utilisation du modèle objet AdventureWorks (EDM)

Le code utilisé par l'application cliente AdventureWorks affiché dans l'exemple ci-dessous illustre plusieurs fonctionnalités du modèle EDM (Modèle de données d'entité). Les schémas décrits dans les rubriques précédentes sur le modèle AdventureWorks Model constituent la base pour les entités et les associations utilisées par le code dans cette section.

Les types conçus dans les schémas et mappés au stockage sont créés en tant que modèle objet programmable. Les données de ce modèle peuvent être programmées à l'aide de la syntaxe CLR (Common Language Runtime) sans incorporer de requêtes SQL dans le code sous forme de chaînes.

Configuration d'application

L'utilisation du modèle objet requiert une connexion à la base de données dans laquelle les données d'application sont stockées. Une connexion d'entité aux objets d'exécution fournis par la DLL construite à partir des schémas est également nécessaire.

Le fichier exe.config contient une chaîne de connexion qui est utilisée pour se connecter à une base de données SQL Server et établir une connexion d'entité. Avec une connexion d'entité en place, il est possible d'accéder à partir du code aux entités et associations dans le modèle objet.

Le texte de la chaîne de connexion doit être ajouté dans le fichier exe.config par le développeur.

L'affectation providerName="System.Data.EntityClient" spécifie une connexion d'entité qui utilise les schémas et les mappages définis dans des schémas illustrés dans les autres rubriques de cette section.

<?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>
NoteRemarque

Cette chaîne de connexion affecte la valeur true à plusieurs jeux de résultats actifs, comme cela est requis pour appeler la méthode Load sur des associations lorsqu'un autre lecteur de données est déjà ouvert sur la même connexion.

Utilisation des entités et des associations AdventureWorks

Le code suivant illustre des requêtes basées sur les entités et les associations définies dans les schémas dans d'autres rubriques de cette section relatives à 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);
            }

        }

        
    }
}

Voir aussi

Concepts

Propriété étendue (CSDL)

Autres ressources

Spécifications EDM
Schémas et spécification de mappage (Entity Framework)
Exemples d'applications (Entity Framework)