Condividi tramite


Procedura: utilizzare Object Services con oggetti personalizzati (Entity Framework)

Anche se si utilizzano classi di dati personalizzate, è possibile sfruttare le funzionalità di Object Services fornite dalle classi di dati generate dagli strumenti di Entity Framework. Sono incluse le funzionalità seguenti:

  • Possibilità di creare un'istanza di un oggetto ObjectContext specifico di Entity Data Model (EDM), incluse le connessioni predefinite.

  • Proprietà che restituiscono oggetti ObjectQuery specifici del tipo.

  • Metodi personalizzati che consentono di aggiungere un oggetto a un set di entità specifico.

Il metodo più semplice per utilizzare tutte le funzionalità di Object Services consiste nell'aggiungere al progetto la classe generata che eredita da ObjectContext. Questa classe viene generata dagli strumenti di Entity Framework, in base a EDM.

Per utilizzare il codice oggetto generato in un progetto C#

  1. Dal prompt dei comandi passare alla posizione del file CSDL (Conceptual Schema Definition Language) per il modello, quindi eseguire il comando seguente rimuovendo le interruzioni di riga:

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

    In questo modo, il livello di oggetti verrà rigenerato in C#, in base al file CSDL specificato.

  2. Aprire il file di codice appena generato, copiare la classe che eredita da ObjectContext e incollare questa classe nel file di codice delle classi di dati personalizzate.

    NoteNota

    È anche possibile rimuovere le classi di dati e aggiungere la classe rimanente al progetto.

Per utilizzare il codice oggetto generato in un progetto Visual Basic

  1. Dal prompt dei comandi passare alla posizione del file CSDL per il modello, quindi eseguire il comando seguente rimuovendo le interruzioni di riga:

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

    In questo modo, il livello di oggetti verrà rigenerato in Visual Basic, in base al file CSDL specificato.

  2. Aprire il file di codice appena generato, copiare la classe che eredita da ObjectContext e incollare questa classe nel file di codice delle classi di dati personalizzate.

    NoteNota

    È anche possibile rimuovere le classi di dati e aggiungere la classe rimanente al progetto.

Esempio

In questo esempio viene illustrato il codice oggetto contestuale generato che supporta le classi di dati personalizzate Order e 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);
        }
    }
}

Vedere anche

Attività

Procedura: ereditare dalle classi di base EntityObject e ComplexObject (Entity Framework)
Procedura: implementare interfacce di classi di dati personalizzate (Entity Framework)

Riferimento

Generatore EDM (EdmGen.exe)

Concetti

Personalizzazione di oggetti (Entity Framework)