Partager via


Procédure : utiliser Object Services avec des objets personnalisés (Entity Framework)

Même si vous utilisez des classes de données personnalisées, vous pouvez quand même tirer parti des fonctionnalités Object Services fournie par les classes de données générées par les outils Entity Framework. Ces fonctionnalités sont les suivantes :

  • possibilité d'instancier un objet ObjectContext propre à votre modèle EDM (Entity Data Model), dont des connexions prédéfinies ;

  • propriétés qui retournent des objets ObjectQuery propres à un type ;

  • méthodes personnalisées qui ajoutent un objet à un jeu d'entités spécifique.

Le moyen le plus simple de tirer pleinement parti des fonctionnalités Object Services est d'ajouter à votre projet la classe générée qui hérite de l'objet ObjectContext. Cette classe est générée par les outils Entity Framework sur la base de votre EDM.

Pour utiliser du code objet généré dans un projet C#

  1. À partir de l'invite de commandes, naviguez jusqu'à l'emplacement du fichier CSDL (Conceptual Schema Definition Language) de votre modèle, puis exécutez la commande suivante avec les sauts de ligne supprimés :

    %windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration 
    /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.cs /language:CSharp
    

    Cette commande régénère la couche objet en C#, sur la base du fichier CSDL spécifié.

  2. Ouvrez le fichier de code nouvellement généré, copiez la classe qui hérite de l'objet ObjectContext et collez cette classe dans votre fichier de code de classes de données personnalisées.

    NoteRemarque

    Vous pouvez aussi supprimer les classes de données et ajouter la classe restante à votre projet.

Pour utiliser du code objet généré dans un projet Visual Basic

  1. À partir de l'invite de commandes, naviguez jusqu'à l'emplacement du fichier CSDL de votre modèle, puis exécutez la commande suivante avec les sauts de ligne supprimés :

    %windir%\Microsoft.NET\Framework\v3.5\edmgen.exe /mode:EntityClassGeneration 
    /incsdl:.\YourModel.csdl /outobjectlayer:.\YourModel.context.vb /language:VB
    

    Cette commande régénère la couche objet en Visual Basic, sur la base du fichier CSDL spécifié.

  2. Ouvrez le fichier de code nouvellement généré, copiez la classe qui hérite de l'objet ObjectContext et collez cette classe dans votre fichier de code de classes de données personnalisées.

    NoteRemarque

    Vous pouvez aussi supprimer les classes de données et ajouter la classe restante à votre projet.

Exemple

Cet exemple illustre le code de contexte de l'objet généré qui prend en charge les classes de données personnalisées Order et LineItem.

Option Strict Off
Option Explicit On

<Assembly: Global.System.Data.Objects.DataClasses.EdmSchemaAttribute("9f3bb474-6454-4ff1-911e-4a8be227e97c")> 

Namespace Microsoft.Samples.Edm
    '''<summary>
    '''There are no comments for SalesOrdersEntities in the schema.
    '''</summary>
    Partial Public Class SalesOrdersEntities
        Inherits Global.System.Data.Objects.ObjectContext
        '''<summary>
        '''Initializes a new SalesOrdersEntities object using the connection string found in the 'SalesOrdersEntities' section of the application configuration file.
        '''</summary>
        Public Sub New()
            MyBase.New("name=SalesOrdersEntities", "SalesOrdersEntities")
        End Sub
        '''<summary>
        '''Initialize a new SalesOrdersEntities object.
        '''</summary>
        Public Sub New(ByVal connectionString As String)
            MyBase.New(connectionString, "SalesOrdersEntities")
        End Sub
        '''<summary>
        '''Initialize a new SalesOrdersEntities object.
        '''</summary>
        Public Sub New(ByVal connection As Global.System.Data.EntityClient.EntityConnection)
            MyBase.New(connection, "SalesOrdersEntities")
        End Sub
        '''<summary>
        '''There are no comments for LineItem in the schema.
        '''</summary>
        <Global.System.ComponentModel.BrowsableAttribute(False)> _
        Public ReadOnly Property LineItem() As Global.System.Data.Objects.ObjectQuery(Of LineItem)
            Get
                If (Me._LineItem Is Nothing) Then
                    Me._LineItem = MyBase.CreateQuery(Of LineItem)("[LineItem]")
                End If
                Return Me._LineItem
            End Get
        End Property
        Private _LineItem As Global.System.Data.Objects.ObjectQuery(Of LineItem) = Nothing
        '''<summary>
        '''There are no comments for Order in the schema.
        '''</summary>
        <Global.System.ComponentModel.BrowsableAttribute(False)> _
        Public ReadOnly Property Order() As Global.System.Data.Objects.ObjectQuery(Of Order)
            Get
                If (Me._Order Is Nothing) Then
                    Me._Order = MyBase.CreateQuery(Of Order)("[Order]")
                End If
                Return Me._Order
            End Get
        End Property
        Private _Order As Global.System.Data.Objects.ObjectQuery(Of Order) = Nothing
        '''<summary>
        '''There are no comments for LineItem in the schema.
        '''</summary>
        Public Sub AddToLineItem(ByVal lineItem As LineItem)
            MyBase.AddObject("LineItem", lineItem)
        End Sub
        '''<summary>
        '''There are no comments for Order in the schema.
        '''</summary>
        Public Sub AddToOrder(ByVal order As Order)
            MyBase.AddObject("Order", order)
        End Sub
    End Class
End Namespace
[assembly: System.Data.Objects.DataClasses.EdmSchemaAttribute()]

namespace Microsoft.Samples.Edm
{

    /// <summary>
    /// There are no comments for SalesOrdersEntities in the schema.
    /// </summary>
    public partial class SalesOrdersEntities : global::System.Data.Objects.ObjectContext
    {
        /// <summary>
        /// Initializes a new SalesOrdersEntities object using the connection string found in the 'SalesOrdersEntities' section of the application configuration file.
        /// </summary>
        public SalesOrdersEntities() :
            base("name=SalesOrdersEntities", "SalesOrdersEntities")
        {
        }
        /// <summary>
        /// Initialize a new SalesOrdersEntities object.
        /// </summary>
        public SalesOrdersEntities(string connectionString) :
            base(connectionString, "SalesOrdersEntities")
        {
        }
        /// <summary>
        /// Initialize a new SalesOrdersEntities object.
        /// </summary>
        public SalesOrdersEntities(global::System.Data.EntityClient.EntityConnection connection) :
            base(connection, "SalesOrdersEntities")
        {
        }
        /// <summary>
        /// There are no comments for LineItem in the schema.
        /// </summary>
        [global::System.ComponentModel.BrowsableAttribute(false)]
        public global::System.Data.Objects.ObjectQuery<LineItem> LineItem
        {
            get
            {
                if ((this._LineItem == null))
                {
                    this._LineItem = base.CreateQuery<LineItem>("[LineItem]");
                }
                return this._LineItem;
            }
        }
        private global::System.Data.Objects.ObjectQuery<LineItem> _LineItem = null;
        /// <summary>
        /// There are no comments for Order in the schema.
        /// </summary>
        [global::System.ComponentModel.BrowsableAttribute(false)]
        public global::System.Data.Objects.ObjectQuery<Order> Order
        {
            get
            {
                if ((this._Order == null))
                {
                    this._Order = base.CreateQuery<Order>("[Order]");
                }
                return this._Order;
            }
        }
        private global::System.Data.Objects.ObjectQuery<Order> _Order = null;
        /// <summary>
        /// There are no comments for LineItem in the schema.
        /// </summary>
        public void AddToLineItem(LineItem lineItem)
        {
            base.AddObject("LineItem", lineItem);
        }
        /// <summary>
        /// There are no comments for Order in the schema.
        /// </summary>
        public void AddToOrder(Order order)
        {
            base.AddObject("Order", order);
        }
    }
}

Voir aussi

Tâches

Procédure : hériter des classes de base EntityObject et ComplexObject (Entity Framework)
Procédure : implémenter des interfaces de classes de données personnalisées (Entity Framework)

Référence

EDM Generator (EdmGen.exe)

Concepts

Personnalisation des objets (Entity Framework)