Binden von Objekten an Steuerelemente (Entity Framework)

Mit Entity Framework können Steuerelemente, wie z. B. ComboBox, ListView oder DataGridView, an eine EntityCollection-Auflistung oder ein ObjectResult-Objekt gebunden werden, das bei Ausführung einer ObjectQuery-Abfrage zurückgegeben wird. Beide Entity Framework -Klassen implementieren die IListSource-Schnittstelle für die Datenbindung. Die von den Entity Framework -Tools generierten Entitätstypen implementieren INotifyPropertyChanged. Das ermöglicht eine bidirektionale Datenbindung zwischen Objekteigenschaften und Steuerelementen, d. h., Aktualisierungen der Steuerelemente werden zurück an die Eigenschaften des gebundenen Objekts übertragen.

Zum Binden von Objekten an ein Windows Form-Steuerelement legen Sie die DataSource-Eigenschaft des Steuerelements auf die EntityCollection oder das ObjectResultfest, das zurückgegeben wird, wenn die Execute-Methode für ein ObjectQuery-Objekt aufgerufen wird. Im folgenden Beispiel wird eine EntityCollection an ein DataGridView-Steuerelement gebunden:

// Bind the items for this order to the DataGridView.
lineItemsDataGrid.DataSource = order.SalesOrderDetails;

Weitere Informationen finden Sie unter Gewusst wie: Binden von Objekten an Windows Form-Steuerelemente (Entity Framework).

Sie können Datenquellen erstellen, die auf den Objekten einer Visual Studio-Anwendung basieren. Nachdem Sie einen Entitätstyp als eine Datenquelle in einem Projekt definiert haben, können Sie Formulare erstellen, die Daten aus Entity Framework anzeigen, indem Sie Elemente aus dem Fenster Datenquellen auf die Formulare ziehen. Diese Elemente werden zu Steuerelementen auf dem Formular, das an die Datenquelle gebunden ist. Weitere Informationen finden Sie unter Data Sources Window. Zur Laufzeit weisen Sie das Ergebnis einer eingegebenen ObjectQuery der DataSource-Eigenschaft der BindingSource zu, die von der Datenquelle verwendet wird. Dies zeigt die Eigenschaften der Objekte an, die von der Abfrage in den Steuerelementen zurückgegeben werden. Wie bei direkter Datenbindung übernehmen Sie die an den Werten der Steuerelemente vorgenommenen Aktualisierungen für die Datenquelle, wenn Sie die SaveChanges-Methode aufrufen. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen eines Objekts als Projektdatenquelle (Entity Framework).

Zum Binden von Objekten an ein Windows Presentation Foundation (WPF)-Steuerelement legen Sie die DataContext-Eigenschaft des Steuerelements auf eine EntityCollection oder ein ObjectResultfest, das zurückgegeben wird, wenn die Execute-Methode für ein ObjectQuery-Objekt aufgerufen wird. Verwenden Sie die ItemsSource-Eigenschaft, um die Objektquelle für das Steuerelement festzulegen. Wenn Sie ein Steuerelement an ein verknüpftes Objekt binden, das von einer Navigationseigenschaft zurückgegeben wird, schließen Sie den Pfad in die für die ItemsSource-Eigenschaft definierte Bindung ein. Der Pfad ist relativ zum Stammobjekt, das von der DataContext-Eigenschaft des übergeordneten Steuerelements festgelegt ist. Im folgenden Beispiel wird die DataContext-Eigenschaft eines Grid-Steuerelements so festgelegt, dass das Steuerelement an ObjectResult gebunden wird:

' Execute the query and bind the result to the OrderItems control.
Me.orderItemsGrid.DataContext = CType(query, ObjectQuery).Execute(MergeOption.AppendOnly)
// Execute the query and bind the result to the OrderItems control.
this.orderItemsGrid.DataContext = ((ObjectQuery)query).Execute(MergeOption.AppendOnly);

Das folgende Beispiel veranschaulicht die XAML-Bindungsdefinition des untergeordneten ListView-Elements und der ComboBox-Steuerelemente:

<ComboBox DisplayMemberPath="SalesOrderID" ItemsSource="{Binding}"
          IsSynchronizedWithCurrentItem="true" 
          Height="23" Margin="122,12,198,0" Name="comboBoxOrder" VerticalAlignment="Top"/>
<ListView ItemsSource="{Binding Path=SalesOrderDetails}" Name="listViewItems" Margin="34,46,34,50">
    <ListView.View>
        <GridView AllowsColumnReorder="False" ColumnHeaderToolTip="Line Items">
            <GridViewColumn DisplayMemberBinding="{Binding Path=ProductID}" 
                Header="Product" Width="50"/>
            <GridViewColumn DisplayMemberBinding="{Binding Path=OrderQty}" 
                Header="Quantity" Width="50"/>
            <GridViewColumn DisplayMemberBinding="{Binding Path=UnitPrice}" 
                Header="Cost" Width="50"/>
            <GridViewColumn DisplayMemberBinding="{Binding Path=LineTotal}" 
                Header="Line Total" Width="80"/>
        </GridView>
    </ListView.View>
</ListView>

Weitere Informationen finden Sie unter Gewusst wie: Binden von Objekten an Windows Presentation Foundation-Steuerelemente (Entity Framework).

Entity Framework enthält das EntityDataSource-Webserversteuerelement. Sie können die Ergebnisse von Objektabfragen mithilfe dieses ASP.NET-Datenquellensteuerelements an Steuerelemente auf einer ASP.NET-Webseite binden. Weitere Informationen finden Sie im Beispiel zum EntityDataSource-Steuerelement.

Folgendes gilt beim Binden von Objekten an Steuerelemente:

  • Es wird empfohlen, Steuerelemente nicht direkt an eine ObjectQuery zu binden. Stattdessen sollten die Steuerelemente an das Ergebnis der Execute-Methode gebunden werden. Auf diese Weise wird verhindert, dass eine Abfrage während der Bindung mehrmals ausgeführt wird.

    Bb738469.note(de-de,VS.100).gifHinweis:
    Wenn Sie es vorziehen, mit LINQ-Abfragen zu arbeiten, sollten Sie das Ergebnis der Abfrage in ObjectQuery umwandeln und die Execute-Methode aufrufen.

    Im folgenden Beispiel wird eine ComboBox an das ObjectResult gebunden, das von der Ausführung einer ObjectQuery des SalesOrderHeader-Typs zurückgegeben wird:

    // Create a query for orders that includes line items.
    ObjectQuery<SalesOrderHeader> orderQuery = context.SalesOrderHeaders
        .Where("it.CustomerID = @customerId", 
        new ObjectParameter("customerId", customerId))
        .Include("SalesOrderDetails");
    
    // Display the PO number in the combo box.
    this.ordersListBox.DisplayMember = "PurchaseOrderNumber";
    
    // Bind the combo box to the ObjectResult of SalesOrderHeader 
    // that is returned when the query is executed.
    this.ordersListBox.DataSource = orderQuery.Execute(MergeOption.AppendOnly);
    
  • Möglicherweise müssen Sie die Abfrage erneut unter Verwendung der Execute-Methode ausführen, um sicherzustellen, dass die Datenquelle auf dem neuesten Stand ist. So wird das Steuerelement an ein neues ObjectResult gebunden. In den folgenden Fällen sollten Sie auf diese Weise vorgehen, um sicherzustellen, dass Objektdaten aktuell sind:

    • Änderungen werden am gleichen ObjectContext außerhalb des gebundenen Steuerelements vorgenommen.

    • Daten in der Datenquelle wurden geändert.

    • Objekte wurden mit der NoTracking-Option zurückgegeben.

  • Sie können nach der Datenbindung von einem Steuerelement aus auf einzelne Entitätsobjekte zugreifen. Sie können jedoch nicht auf die Auflistung vom gebundenen Steuerelement aus zugreifen. Weitere Informationen finden Sie unter Gewusst wie: Binden von Objekten an Windows Form-Steuerelemente (Entity Framework).

  • Sie können eine EntityCollection an ein Steuerelement binden, da von ihm IListSource implementiert wird. Wenn Sie jedoch die OfType-Methode auf ein EntityCollection anwenden, um eine Auflistung der Objekte eines abgeleiteten Typs zurückzugeben, können Sie den zurückgegebenen IEnumerable nicht direkt an ein Steuerelement binden. Zum Binden eines Steuerelements an eine Auflistung von Objekten eines von einem EntityCollection abgerufenen abgeleiteten Typs verwenden Sie stattdessen die CreateSourceQuery-Methode, um die ObjectQuery abzurufen, die die grundlegende EntityCollection definiert. Sie können ein Steuerelement an die Ausführung der ObjectQuery binden, die von der OfType-Methode für ein ObjectQuery zurückgegeben wird. Gehen Sie dazu folgendermaßen vor:

    // Bind the data grid to the result of the execution of the ObjectQuery 
    // that returns only the online courses for the selected department.
    dataGridViewCourses.DataSource =
        selectedDepartment.Courses.CreateSourceQuery()
        .OfType<OnlineCourse>().Execute(MergeOption.AppendOnly);
    

    Weitere Informationen finden Sie unter Gewusst wie: Binden von Steuerelementen an abgeleitete Typen (Entity Framework).

Inhalt dieses Abschnitts

Gewusst wie: Binden von Objekten an Windows Form-Steuerelemente (Entity Framework)

Gewusst wie: Binden von Objekten an Windows Presentation Foundation-Steuerelemente (Entity Framework)

Gewusst wie: Binden von Steuerelementen an abgeleitete Typen (Entity Framework)

Gewusst wie: Hinzufügen eines Objekts als Projektdatenquelle (Entity Framework)

Siehe auch

Konzepte

Arbeiten mit Objekten (Entity Framework)

Weitere Ressourcen

Walkthrough: Creating the Class Schedule Web Application