Associazione di oggetti ai controlli (Entity Framework)

Entity Framework consente di associare controlli quali ComboBox, ListView e DataGridView a un oggetto EntityCollection o ObjectResult restituito quando viene eseguito un oggetto ObjectQuery. Entrambe le classi Entity Framework implementano l'interfaccia IListSource per l'associazione dati. I tipi di entità generati dagli strumenti di Entity Framework implementano INotifyPropertyChanged. Questo consente l'associazione di dati bidirezionale tra controlli e proprietà dell'oggetto, in modo che gli aggiornamenti ai controlli vengano propagati di nuovo alle proprietà dell'oggetto associato.

Per associare oggetti a un controllo Windows Form, impostare la proprietà DataSource del controllo sull'oggetto EntityCollection o sull'oggetto ObjectResult restituito quando il metodo Execute viene chiamato su un oggetto ObjectQuery. Nell'esempio seguente viene associato un oggetto EntityCollection a un controllo DataGridView:

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

Per ulteriori informazioni, vedere Procedura: associare oggetti a controlli Windows Form (Entity Framework).

È possibile creare origini dati basate sugli oggetti in un'applicazione Visual Studio. Dopo avere definito un tipo di entità come origine dati in un progetto, è possibile creare dei form che visualizzino i dati da Entity Framework tramite il trascinamento di elementi dalla finestra Origine dati nei form. Questi elementi diventano controlli nei form associati all'origine dati. Per ulteriori informazioni, vedere Data Sources Window. In fase di runtime, si assegna il risultato di un oggetto ObjectQuery tipizzato alla proprietà DataSource dell'oggetto BindingSource utilizzato dall'origine dati. In questo modo vengono visualizzate le proprietà degli oggetti restituiti dalla query nei controlli. Analogamente all'associazione dati diretta, gli aggiornamenti eseguiti sui valori dei controlli vengono applicati all'origine dati quando si chiama il metodo SaveChanges. Per ulteriori informazioni, vedere Procedura: aggiungere un oggetto come origine dati progetto (Entity Framework).

Per associare oggetti a un controllo WPF (Windows Presentation Foundation), impostare la proprietà DataContext del controllo sull'oggetto EntityCollection o sull'oggetto ObjectResult restituito quando il metodo Execute viene chiamato su un oggetto ObjectQuery. Utilizzare la proprietà ItemsSource per impostare l'origine dell'oggetto per il controllo. Se si associa un controllo a un oggetto correlato restituito da una proprietà di navigazione, includere il percorso nell'associazione definita per la proprietà ItemsSource. Questo percorso è relativo all'oggetto radice impostato dalla proprietà DataContext del controllo padre. Nell'esempio che segue viene impostata la proprietà DataContext di un controllo Grid per associare il controllo a un oggetto ObjectResult:

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

Nell'esempio è riportata la definizione dell'associazione XAML dei controlli figlio ListView e ComboBox:

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

Per ulteriori informazioni, vedere Procedura: associare oggetti a controlli Windows Presentation Foundation (Entity Framework).

Entity Framework include il controllo server Web EntityDataSource. È possibile utilizzare questo controllo dell'origine dati ASP.NET per associare i risultati delle query di oggetto ai controlli su una pagina Web ASP.NET. Per ulteriori informazioni, vedere l'Esempio di controllo EntityDataSource.

Le considerazioni seguenti riguardano l'associazione degli oggetti ai controlli:

  • È consigliabile non associare i controlli direttamente a un oggetto ObjectQuery. Associare invece i controlli al risultato del metodo Execute. Questo tipo di associazione impedisce che una query venga eseguita più volte durante l'associazione.

    Bb738469.note(it-it,VS.100).gifNota:
    Se si preferisce utilizzare query LINQ, è consigliabile eseguire il cast del risultato della query a ObjectQuery e chiamare il metodo Execute.

    Nell'esempio che segue un oggetto ComboBox viene associato all'oggetto ObjectResult restituito dall'esecuzione di un ObjectQuery di tipo SalesOrderHeader:

    // 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);
    
  • Per assicurarsi che l'origine dati sia aggiornata, potrebbe essere necessario rieseguire la query utilizzando il metodo Execute. In questo modo il controllo verrà associato a un nuovo oggetto ObjectResult. È consigliabile eseguire questa operazione per assicurarsi che i dati dell'oggetto siano aggiornati nei casi seguenti:

    • Vengono apportate modifiche allo stesso oggetto ObjectContext all'esterno del controllo associato.

    • Vengono apportate modifiche ai dati dell'origine dati.

    • Gli oggetti sono stati restituiti utilizzando l'opzione NoTracking.

  • Al termine dell'associazione dati, è possibile accedere a singoli oggetti entità da un controllo ma non è possibile accedere alla raccolta dal controllo associato. Per ulteriori informazioni, vedere Procedura: associare oggetti a controlli Windows Form (Entity Framework).

  • È possibile associare un oggetto EntityCollection a un controllo perché implementa IListSource. Quando, tuttavia, si esegue il metodo OfType su un EntityCollection per restituire una raccolta di oggetti di un tipo derivato, non è possibile associare l'oggetto restituito IEnumerable direttamente a un controllo. Per associare un controllo a una raccolta di oggetti di un tipo derivato ottenuto da un EntityCollection, utilizzare invece il metodo CreateSourceQuery per ottenere l'oggetto ObjectQuery che definisce l'oggetto di base EntityCollection. È possibile associare un controllo all'esecuzione dell'oggetto ObjectQuery che viene restituito dal metodo OfType su un oggetto ObjectQuery, come mostrato nell'esempio seguente:

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

    Per ulteriori informazioni, vedere Procedura: associare controlli a tipi derivati (Entity Framework).

In questa sezione

Procedura: associare oggetti a controlli Windows Form (Entity Framework)

Procedura: associare oggetti a controlli Windows Presentation Foundation (Entity Framework)

Procedura: associare controlli a tipi derivati (Entity Framework)

Procedura: aggiungere un oggetto come origine dati progetto (Entity Framework)

Vedere anche

Concetti

Utilizzo di oggetti (Entity Framework)

Altre risorse

Walkthrough: Creating the Class Schedule Web Application