Partager via


Procédure: définir un contexte d'objet personnalisé (Entity Framework)

Lorsque vous utilisez des entités POCO, vous désactivez la génération de la couche objet par Entity Framework . En plus de définir des types d'entité personnalisés, vous devez définir un type de contexte d'objet personnalisé ou gérer vos propres connexions via une instance créée manuellement de EntityConnection que vous transmettez au constructeur de l'objet ObjectContext. Pour plus d'informations sur la création d'une instance de EntityConnection, consultez Procédure : générer une chaîne de connexion pour EntityConnection (Entity Framework).

Cette rubrique montre comment créer un contexte d'objet personnalisé.

Bb738471.note(fr-fr,VS.100).gifRemarque :
Pour désactiver la génération de couche objet avec ADO.NET Entity Data Model Designer (Concepteur d'entités), ouvrez le fichier .edmx dans le Concepteur d'entités.Cliquez avec le bouton droit sur l'aire du concepteur, puis sélectionnez Propriétés.Dans la fenêtre Propriétés, sélectionnez la propriété Stratégie de génération de code et sélectionnez None.

La classe de contexte d'objet personnalisé gère les entités POCO définies dans Procédure : définir des entités POCO (Entity Framework).

Un contexte d'objet personnalisé doit inclure les fonctionnalités suivantes :

  • possibilité d'instancier un objet ObjectContext propre à votre modèle conceptuel, y compris les connexions prédéfinies ;

  • propriétés qui retournent des objets ObjectSet propres à un type.

Pour plus d'informations sur la définition de types d'entité personnalisés, consultez Procédure : définir des entités POCO (Entity Framework).

Pour utiliser du code de contexte d'objet généré dans votre code de contexte d'objet personnalisé

  1. Ajoutez un fichier de code de classe à votre projet.

  2. Incluez les espaces de noms suivants :

    System

    System.Data.Objects

    System.Collections.Generic

  3. Renommez la classe POCOAdventureWorksEntities. Assurez-vous que la classe hérite de la classe ObjectContext.

    Partial Public Class POCOAdventureWorksEntities
        Inherits ObjectContext
    
    public partial class POCOAdventureWorksEntities : ObjectContext
    
  4. Définissez des variables membres du type ObjectSet pour chaque type d'entité POCO :

    Private _contacts As ObjectSet(Of Contact)
    Private _lineItems As ObjectSet(Of LineItem)
    Private _orders As ObjectSet(Of Order)
    
    private ObjectSet<Contact> _contacts;
    private ObjectSet<LineItem> _lineItems;
    private ObjectSet<Order> _orders;
    
  5. Attribuez aux constructeurs la classe POCOAdventureWorksEntities.

    Public Sub New()
        MyBase.New("name=AdventureWorksEntities", "AdventureWorksEntities")
        Me.ContextOptions.LazyLoadingEnabled = True
    End Sub
    
    Public Sub New(ByVal connectionString As String)
        MyBase.New(connectionString, "AdventureWorksEntities")
        Me.ContextOptions.LazyLoadingEnabled = True
    End Sub
    
     public POCOAdventureWorksEntities()
         : base("name=AdventureWorksEntities", "AdventureWorksEntities")
     {
         this.ContextOptions.LazyLoadingEnabled = true;
    }
    
     public POCOAdventureWorksEntities(string connectionString)
         : base(connectionString, "AdventureWorksEntities")
     {
         this.ContextOptions.LazyLoadingEnabled = true;
     }
    
  6. Définissez des propriétés qui retournent des objets ObjectSet.

    Public ReadOnly Property Contacts() As ObjectSet(Of Contact)
        Get
            Return If(_contacts, MyBase.CreateObjectSet(Of Contact)())
        End Get
    End Property
    
    Public ReadOnly Property LineItems() As ObjectSet(Of LineItem)
        Get
            Return If(_lineItems, MyBase.CreateObjectSet(Of LineItem)())
        End Get
    End Property
    
    Public ReadOnly Property Orders() As ObjectSet(Of Order)
        Get
            Return If(_orders, MyBase.CreateObjectSet(Of Order)())
        End Get
    End Property
    
    public ObjectSet<Contact> Contacts
    {
        get
        {
            return _contacts ?? (_contacts = base.CreateObjectSet<Contact>());
        }
    }
    
    public ObjectSet<LineItem> LineItems
    {
        get
        {
            return _lineItems ?? (_lineItems = base.CreateObjectSet<LineItem>());
        }
    }
    
    public ObjectSet<Order> Orders
    {
        get
        {
            return _orders ?? (_orders = base.CreateObjectSet<Order>());
        }
    }
    

Exemple

Cet exemple illustre le code de contexte d'objet personnalisé qui prend en charge les classes de données personnalisées Contact, Order et LineItem.

Partial Public Class POCOAdventureWorksEntities
    Inherits ObjectContext
    Private _contacts As ObjectSet(Of Contact)
    Private _lineItems As ObjectSet(Of LineItem)
    Private _orders As ObjectSet(Of Order)
#Region "Constructors"
    Public Sub New()
        MyBase.New("name=AdventureWorksEntities", "AdventureWorksEntities")
        Me.ContextOptions.LazyLoadingEnabled = True
    End Sub

    Public Sub New(ByVal connectionString As String)
        MyBase.New(connectionString, "AdventureWorksEntities")
        Me.ContextOptions.LazyLoadingEnabled = True
    End Sub
#End Region

#Region "ObjectSet Properties"
    Public ReadOnly Property Contacts() As ObjectSet(Of Contact)
        Get
            Return If(_contacts, MyBase.CreateObjectSet(Of Contact)())
        End Get
    End Property

    Public ReadOnly Property LineItems() As ObjectSet(Of LineItem)
        Get
            Return If(_lineItems, MyBase.CreateObjectSet(Of LineItem)())
        End Get
    End Property

    Public ReadOnly Property Orders() As ObjectSet(Of Order)
        Get
            Return If(_orders, MyBase.CreateObjectSet(Of Order)())
        End Get
    End Property

#End Region
    Public Overloads Overrides Function SaveChanges(ByVal options As SaveOptions) As Integer

        For Each entry As ObjectStateEntry In ObjectStateManager.GetObjectStateEntries(EntityState.Added Or EntityState.Modified)
            ' Validate the objects in the Added and Modified state 
            ' if the validation fails throw an exeption. 
        Next
        Return MyBase.SaveChanges(options)
    End Function

End Class
public partial class POCOAdventureWorksEntities : ObjectContext
{
    private ObjectSet<Contact> _contacts;
    private ObjectSet<LineItem> _lineItems;
    private ObjectSet<Order> _orders;
    #region Constructors
    public POCOAdventureWorksEntities()
        : base("name=AdventureWorksEntities", "AdventureWorksEntities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
   }

    public POCOAdventureWorksEntities(string connectionString)
        : base(connectionString, "AdventureWorksEntities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
    }
    #endregion

    #region ObjectSet Properties
    public ObjectSet<Contact> Contacts
    {
        get
        {
            return _contacts ?? (_contacts = base.CreateObjectSet<Contact>());
        }
    }

    public ObjectSet<LineItem> LineItems
    {
        get
        {
            return _lineItems ?? (_lineItems = base.CreateObjectSet<LineItem>());
        }
    }

    public ObjectSet<Order> Orders
    {
        get
        {
            return _orders ?? (_orders = base.CreateObjectSet<Order>());
        }
    }

    #endregion
    public override int SaveChanges(SaveOptions options)
    {

        foreach (ObjectStateEntry entry in
            ObjectStateManager.GetObjectStateEntries(
            EntityState.Added | EntityState.Modified))
        {
            // Validate the objects in the Added and Modified state
            // if the validation fails throw an exeption.
        }
        return base.SaveChanges(options);
    }

}

Voir aussi

Référence

EDM Generator (EdmGen.exe)

Concepts

Personnalisation des objets (Entity Framework)

Autres ressources

How to: Customize Object-Layer Code Generation