Compartir a través de


Cómo usar Servicios de objeto con objetos personalizados (Entity Framework)

Aunque utilice clases de datos personalizadas, todavía puede aprovechar las ventajas de la funcionalidad de Servicios de objeto proporcionada por las clases de datos generadas por las herramientas de Entity Framework. Esto incluye las funcionalidades siguientes:

  • La capacidad de crear instancias de un ObjectContext específico de su Entity Data Model (EDM), incluidas las conexiones predefinidas.

  • Propiedades que devuelven objetos ObjectQuery de un tipo específico.

  • Métodos personalizados que agregan un objeto a un conjunto de entidades concreto.

El modo más sencillo de aprovechar en su totalidad las ventajas de las características de Servicios de objeto es agregar al proyecto la clase generada que hereda de ObjectContext. Esta clase la generan las herramientas de Entity Framework, en función del EDM.

Para usar el código de los objetos generados en un proyecto de C#

  1. Desde el símbolo del sistema, navegue a la ubicación del archivo del lenguaje de definición de esquemas conceptuales (CSDL) correspondiente a su modelo y ejecute el siguiente comando sin los saltos de línea:

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

    De este modo se regenera el nivel de objetos en C#, según el archivo de CSDL especificado.

  2. Abra el archivo de código recién generado, copie la clase que se hereda de ObjectContext y péguela en su archivo de código de la clase personalizada.

    Nota

    También puede quitar las clases de datos y agregar la clase restante al proyecto.

Para usar el código de los objetos generados en un proyecto de Visual Basic

  1. Desde el símbolo del sistema, navegue a la ubicación del archivo de CSDL correspondiente a su modelo y ejecute el siguiente comando sin los saltos de línea:

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

    De este modo se regenera el nivel de objetos en Visual Basic, según el archivo de CSDL especificado.

  2. Abra el archivo de código recién generado, copie la clase que se hereda de ObjectContext y péguela en su archivo de código de la clase personalizada.

    Nota

    También puede quitar las clases de datos y agregar la clase restante al proyecto.

Ejemplo

En este ejemplo se muestra el código del contexto del objeto generado que es compatible con las clases de datos personalizadas Order y 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);
        }
    }
}

Vea también

Tareas

Cómo heredar de las clases base EntityObject y ComplexObject (Entity Framework)
Cómo implementar interfaces de clases de datos personalizadas (Entity Framework)

Referencia

Generador de EDM (EdmGen.exe)

Conceptos

Personalizar objetos (Entity Framework)