Share via


AdventureWorks-Datenbindung (EDM-Beispielanwendung)

Das Beispiel "AdventureWorks-Datenbindung" veranschaulicht die vom Entity Framework verwendete Datenbindung. Das Datenmodell wird im Thema AdventureWorks Sales-Modell (EDM) definiert. In dieser Anwendung werden SalesOrderDetail-Entitäten angezeigt und geändert, die SalesOrderHeader-Entitäten zugeordnet sind. In der folgenden Abbildung finden Sie das Dialogfeld, das zum Hinzufügen einer SalesOrderDetail -Entität zu einem SalesOrderHeader verwendet wird, sowie, im Hintergrund, das Hauptanwendungsformular.

Adventureworks SalesModel-DataBinding EDM

Datenbindung im Entity Framework

Die Datenbindung einer ObjectQuery an ein DataGridView -Steuerelement eines Windows-Formulars erfolgt mithilfe weniger Codezeilen. Erstellen Sie zunächst die ObjectQuery . Weisen Sie anschließend die ObjectQuery der DataSource-Eigenschaft der DataGridView zu.

Im folgenden Code wird ein einzelner SalesOrderHeader der von AdventureWorksSalesEntitiesObjectContext bereitgestellten ObjectQuery einem DataGridView -Steuerelement zugewiesen. Der Abfrageparameter wird erstellt, indem die ID -Nummer des SalesOrderHeader von einem Textfeld übergeben wird. Dieser Parameter wird in einer where -Klausel der Abfrage verwendet, um einen einzelnen SalesOrderHeader mit dieser ID-Nummer auszuwählen. Die Abfrage wird der DataSource-Eigenschaft des DataGridView-Steuerelements zugeordnet. In der obigen Abbildung ist das oberste DataGridView-Steuerelement der Windows Form mit der Bezeichnung Sales Order Header mithilfe des folgenden Codesegments mit Daten gefüllt. Die Verwendung der Execute-Methode gewährleistet, dass die Abfrage genau einmal ausgeführt wird.

ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBoxOrderId.Text));
            dataGridViewSOHeader.DataSource =
                 objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p",
                 parameter).Execute(MergeOption.OverwriteChanges);

In der obigen Abbildung ist das DataGridView-Steuerelement mit der Bezeichnung Sales Order Details mithilfe des folgenden Codesegments mit Daten gefüllt. Der SalesOrderHeader verfügt über eine Auflistung zugeordneter SalesOrderDetail -Entitäten, die von der SalesOrderDetail -Eigenschaft des SalesOrderHeader identifiziert werden. Bei der SalesOrderDetail -Eigenschaft handelt es sich um eine EntityCollection . Die Auflistung kann der DataSource -Eigenschaft eines BindingSource -Steuerelements zugewiesen werden. Anschließend wird die BindingSource der DataSource -Eigenschaft eines DateGridView -Steuerelements zugewiesen.

    if(objCtx.SalesOrderHeader.Where(
                "it.SalesOrderID == @p", parameter).Any())
            {
                SalesOrderHeader resultHeader =
                    objCtx.SalesOrderHeader.Where(
                    "it.SalesOrderID == @p", parameter).First();

                resultHeader.SalesOrderDetail.Load();
                dataGridViewOrderDetails.DataSource = 
                    resultHeader.SalesOrderDetail;
            }

Änderungen in Datenbindungsszenarios

Wenn an einer der im Datenraster Sales Order Detail angezeigten SalesOrderDetail-Entitäten eine Änderung vorgenommen wird, muss der datengebundene SalesOrderHeader aktualisiert werden, nachdem im Speicher neue Daten gespeichert wurden. Dies erfolgt in einem Zellbearbeitungshandler in folgender Codesequenz.

Zunächst werden die Änderungen an der Zelle mithilfe der SaveChanges -Methode des ObjectContext im Speicher gespeichert. Anschließend ruft eine ObjectQuery die SalesOrderHeader -Entität ab. Abschließend aktualisiert die Refresh -Methode des ObjectContext die an das DataGridControl gebundenen Daten. Beachten Sie, dass der RefreshMode.StoreWins -Parameter der Refresh -Methode, der diese Daten im Speicher angibt, die Daten im ObjectContext ersetzt.

    objCtx.SaveChanges();

    ObjectParameter parameter =
            new ObjectParameter("p", Int32.Parse(textBox1.Text));

    SalesOrderHeader header =
    objCtx.SalesOrderHeader.Where(
           "it.SalesOrderID == @p", parameter).FirstOrDefault();

    // Refresh the SalesOrderHeader in the grid.
    objCtx.Refresh(RefreshMode.StoreWins, header);

Bei den Codeszenarios in diesem Thema handelt es sich um die wichtigsten Funktionen der Entity Framework-Datenbindung, die in der AdventureWorks-Datenbindungsbeispielanwendung verwendet werden. Den vollständigen Code finden Sie unter den Themen Beispiel für AdventureWorks-Datenbindungsanwendungscode (EDM-Beispielanwendung) und AdventureWorks-Datenbindungsbeispiel 'Add SalesOrderDetail'-Formular (EDM-Beispielanwendung).

Siehe auch

Konzepte

AdventureWorks Sales-Modell (EDM)
Beispiel für AdventureWorks-Datenbindungsanwendungscode (EDM-Beispielanwendung)
AdventureWorks-Datenbindungsbeispiel 'Add SalesOrderDetail'-Formular (EDM-Beispielanwendung)