Condividi tramite


Associazione dati di Adventure Works (applicazione di esempio EDM)

Nell'esempio di associazione dati di AdventureWorks viene illustrata un'associazione dati che utilizza Entity Framework. Il modello di dati è definito nell'argomento Modello Sales di AdventureWorks (EDM). Questa applicazione visualizza e modifica le entità SalesOrderDetail associate alle entità SalesOrderHeader. Nella figura seguente sono illustrate la finestra di dialogo utilizzata per aggiungere un'entità SalesOrderDetail a SalesOrderHeader e, sullo sfondo, il form dell'applicazione principale.

Associazione dati del modello Sales di Adventureworks (EDM)

Associazione dati in Entity Framework

L'associazione dati di un oggetto ObjectQuery a un controllo DataGridView in un Windows Form può essere eseguita con poche righe di codice. Creare innanzitutto ObjectQuery. Assegnare quindi ObjectQuery alla proprietà DataSource di DataGridView.

Nel codice seguente viene assegnato un singolo oggetto SalesOrderHeader dall'oggetto ObjectQuery fornito da AdventureWorksSalesEntitiesObjectContext a un controllo DataGridView. Il parametro della query viene creato analizzando il numero ID di SalesOrderHeader da una casella di testo. Questo parametro viene utilizzato in una clausola where della query per selezionare un singolo oggetto SalesOrderHeader con numero di ID corrispondente. La query viene assegnata alla proprietà DataSource del controllo DataGridView. Nella figura precedente nel controllo DataGridView di livello superiore nel Windows Form con l'etichetta Sales Order Header sono inseriti i dati dal segmento di codice riportato di seguito. L'utilizzo del metodo Execute assicura che la query venga eseguita una sola volta.

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

Nella figura precedente nel controllo DataGridView con l'etichetta Sales Order Details sono inseriti i dati dal segmento di codice riportato di seguito. A SalesOrderHeader è associato un insieme di entità SalesOrderDetail identificate dalla proprietà SalesOrderDetail di SalesOrderHeader. La proprietà SalesOrderDetail è effettivamente un oggetto EntityCollection. L'insieme può essere assegnato alla proprietà DataSource di un controllo BindingSource. L'oggetto BindingSource viene quindi assegnato alla proprietà DataSource di un controllo DateGridView.

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

Modifiche negli scenari di associazione dati

Se viene apportata una modifica a una delle entità SalesOrderDetail visualizzate nella griglia dei dati Sales Order Detail, l'oggetto SalesOrderHeader per il quale è stata eseguita l'associazione dati deve essere aggiornato dopo il salvataggio dei nuovi dati nell'archivio. Questa operazione viene eseguita in un gestore di modifica delle celle nella sequenza di codice seguente.

Le modifiche alla cella vengono innanzitutto salvate nell'archivio dal metodo SaveChanges di ObjectContext. Tramite un oggetto ObjectQuery viene quindi recuperata l'entità SalesOrderHeader. Tramite il metodo Refresh di ObjectContext vengono quindi aggiornati i dati associati a DataGridControl. Si noti che il parametro RefreshMode.StoreWins del metodo Refresh, che specifica i dati dell'archivio, sostituisce i dati in ObjectContext.

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

Gli scenari di codice inclusi in questo argomento rappresentano le principali funzionalità dell'associazione dati di Entity Framework utilizzata nell'applicazione di esempio di associazione dati di AdventureWorks. Il codice completo è incluso negli argomenti Codice dell'applicazione di esempio di associazione dati di AdventureWorks (applicazione di esempio EDM) e Associazione dati di AdventureWorks per l'aggiunta del form Add SalesOrderDetail (applicazione di esempio EDM).

Vedere anche

Concetti

Modello Sales di AdventureWorks (EDM)
Codice dell'applicazione di esempio di associazione dati di AdventureWorks (applicazione di esempio EDM)
Associazione dati di AdventureWorks per l'aggiunta del form Add SalesOrderDetail (applicazione di esempio EDM)