Freigeben über


Gewusst wie: Verwenden von Object Services mit benutzerdefinierten Objekten (Entity Framework)

Selbst bei der Verwendung benutzerdefinierter Datenklassen können die Vorteile der von mithilfe der Entity Framework-Tools erstellten Datenklassen bereitgestellten Object Services-Funktionen genutzt werden. Dies betrifft folgende Funktionalitäten:

  • Das Instanziieren eines für das EDM (Entity Data Model) spezifischen ObjectContext einschließlich vordefinierter Verbindungen.

  • Die Eigenschaften, die typenspezifische ObjectQuery-Objekte zurückgeben.

  • Die benutzerdefinierten Methoden, die einer Entitätenmenge ein Objekt hinzufügen.

Die einfachste Methode, alle Funktionen der Object Services zur Verfügung zu stellen, ist das Hinzufügen der generierten Klasse, die von ObjectContext erbt, zum Projekt. Diese Klasse wird auf der Grundlage Ihres EDM von den Entity Framework-Tools erstellt.

So verwenden Sie erstellten Objektcode in einem C#-Projekt

  1. Navigieren Sie von der Eingabeaufforderung zum Speicherort der CSDL-Datei des Modells, und führen Sie den folgenden Befehl aus, nachdem Sie die Zeilenumbrüche entfernt haben:

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

    Durch diesen Befehl wird die Objektebene auf der Grundlage der angegebenen CSDL-Datei in C# neu erstellt.

  2. Öffnen Sie die neu erstellte Codedatei, kopieren Sie die Klasse, die von ObjectContext erbt, und fügen Sie diese Klasse in die benutzerdefinierte Codedatei der Datenklasse ein.

    NoteHinweis

    Sie können auch die Datenklassen entfernen und dem Projekt die verbleibende Klasse hinzufügen.

So verwenden Sie erstellten Objektcode in einem Visual Basic-Projekt

  1. Navigieren Sie von der Eingabeaufforderung zum Speicherort der CSDL-Datei des Modells, und führen Sie den folgenden Befehl aus, nachdem Sie die Zeilenumbrüche entfernt haben:

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

    Durch diesen Befehl wird die Objektebene auf der Grundlage der angegebenen CSDL-Datei in Visual Basic neu erstellt.

  2. Öffnen Sie die neu erstellte Codedatei, kopieren Sie die Klasse, die von ObjectContext erbt, und fügen Sie diese Klasse in die benutzerdefinierte Codedatei der Datenklasse ein.

    NoteHinweis

    Sie können auch die Datenklassen entfernen und dem Projekt die verbleibende Klasse hinzufügen.

Beispiel

In diesem Beispiel wird der erstellte Objektkontextcode veranschaulicht, der die benutzerdefinierten Datenklassen Order und LineItem unterstützt.

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);
        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Erben von den Basisklassen 'EntityObject' und 'ComplexObject' (Entity Framework)
Gewusst wie: Implementieren von Schnittstellen für benutzerdefinierte Datenklassen (Entity Framework)

Verweis

EDM-Generator (EdmGen.exe)

Konzepte

Anpassen von Objekten (Entity Framework)