Condividi tramite


Utilizzo di LINQ con ASP.NET

Aggiornamento: novembre 2007

È possibile utilizzare LINQ (Language-Integrated Query) nelle pagine Web per recuperare e modificare i dati. LINQ applica ai dati relazionali i principi della programmazione orientata agli oggetti. Fornisce un modello di programmazione unificato per l'esecuzione di query su dati di tipi diversi di origini dati ed estende le funzionalità correlate ai dati direttamente nei linguaggi C# e Visual Basic. Per ulteriori informazioni, vedere LINQ (Language-Integrated Query).

È possibile utilizzare LINQ tramite il controllo LinqDataSource, tramite il controllo ObjectDataSource o creando query LINQ.

Quando si utilizza LINQ in un'applicazione Web, è possibile che occorra modificare i file dei criteri per la sicurezza dell'accesso al codice. Queste modifiche sono descritte più avanti in questo argomento.

Controllo LinqDataSource

Il controllo LinqDataSource fornisce un modo semplice per connettersi ai dati di un database o a una raccolta di dati in memoria, ad esempio una matrice. È possibile scrivere in modo dichiarativo tutte le condizioni richieste per gli scenari tipici, ad esempio il recupero, il filtraggio, l'ordinamento o il raggruppamento dei dati. Il controllo crea dinamicamente le query LINQ dai valori forniti in modo dichiarativo.

Quando si recuperano i dati da una classe di contesto LINQ to SQL, è possibile configurare anche un controllo LinqDataSource per gestire le operazioni di aggiornamento, inserimento ed eliminazione. Il controllo esegue le attività senza che sia necessario scrivere i relativi comandi SQL.

Per visualizzare i dati in una pagina Web, si associa un controllo con associazione dati al controllo LinqDataSource. I controlli GridView e DetailsView sono esempi di controlli con associazione dati.

Nell'esempio seguente viene illustrato il codice per un controllo LinqDataSource che si connette al database AdventureWorks. Restituisce i record della tabella Contact che hanno un valore uguale a 1 nella proprietà EmailPromotion.

<asp:LinqDataSource 
    ContextTypeName="AdventureWorksDataContext" 
    TableName="Contacts" 
    Where="EmailPromotion=1"
    ID="LinqDataSource1" 
    >
</asp:LinqDataSource>

Per ulteriori informazioni, vedere Cenni preliminari sul controllo server Web LinqDataSource.

Controllo ObjectDataSource

Si utilizza il controllo ObjectDataSource quando si desidera interagire con i dati in modo più complesso rispetto a quanto possibile con il controllo LinqDataSource. Ad esempio, è possibile creare un metodo di aggiornamento che include l'impostazione di valori nelle tabelle unite.

Il controllo ObjectDataSource può essere utilizzato con una classe LINQ to SQL. A tale scopo, impostare la proprietà TypeName sul nome della classe del contesto dei dati. Impostare inoltre i metodi SelectMethod, UpdateMethod, InsertMethod e DeleteMethod sui metodi della classe del contesto dei dati che eseguono le operazioni corrispondenti.

Quando si utilizza l'esecuzione posticipata delle query con il controllo ObjectDataSource, è necessario creare un gestore eventi affinché l'evento ObjectDisposing annulli l'eliminazione della classe del contesto dei dati. Questo passaggio è necessario perché l'esecuzione posticipata è supportata in LINQ to SQL, mentre il controllo ObjectDataSource tenta di eliminare il contesto dei dati dopo l'operazione Select.

Query LINQ

È possibile includere le query LINQ in una pagina Web senza utilizzare un controllo dell'origine dati. È possibile utilizzare una query LINQ se è necessario utilizzare un operatore di query non disponibile nel controllo LinqDataSource. La si può utilizzare anche per visualizzare dati di sola lettura in un controllo con associazione dati senza l'elaborazione necessaria per creare un controllo di origine dati. Per ulteriori informazioni sugli operatori LINQ, vedere Cenni preliminari sugli operatori di query standard. Per un elenco degli operatori di query disponibili nel controllo LinqDataSource, vedere Cenni preliminari sul controllo server Web LinqDataSource.

Nell'esempio seguente viene mostrato come includere una query LINQ in una pagina Web. Nell'esempio vengono visualizzati i risultati della query in un controllo GridView.

[Visual Basic]

Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim dataContext As AdventureWorksDataContext = _
            New AdventureWorksDataContext()
        Dim query = From contact In dataContext.Contacts _
          Where contact.EmailPromotion = 1 _
          Select contact

        GridView1.DataSource = query
        GridView1.DataBind()
    End If
End Sub

[C#]

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        AdventureWorksDataContext dataContext = 
            new AdventureWorksDataContext();

        var query = from contact in dataContext.Contacts
          where contact.EmailPromotion==1
          select contact;

        GridView1.DataSource = query;
        GridView1.DataBind();
    }
}

LINQ e sicurezza dell'accesso al codice

Nelle sezioni seguenti vengono fornite informazioni sull'utilizzo di LINQ con l'attendibilità di livello medio ed elevato.

Utilizzo di LINQ con l'attendibilità di livello medio

Per utilizzare LINQ in un'applicazione Web in esecuzione con un livello medio di attendibilità, è necessario includere due elementi nel file dei criteri definito per l'attendibilità Medium. Per impostazione predefinita, il file web_mediumtrust.config è il file dei criteri per il livello medio di attendibilità.

Nell'elemento SecurityClasses aggiungere un elemento SecurityClass con gli attributi seguenti:

<SecurityClass 
  Name="ReflectionPermission" 
  Description="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

Nell'elemento PermissionSet con l'attributo Name impostato su "ASP.Net", aggiungere un elemento IPermission dotato degli attributi seguenti:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="RestrictedMemberAccess"
/>
Nota:

È probabile che gli elementi siano stati aggiunti durante il processo di installazione.

Utilizzo di LINQ con l'attendibilità di livello elevato

Per utilizzare LINQ in un'applicazione Web in esecuzione con un livello elevato di attendibilità, è necessario includere un elemento nel file dei criteri definito per l'attendibilità High. Per impostazione predefinita, il file web_hightrust.config è il file dei criteri per il livello elevato di attendibilità. Questo file già include un elemento IPermission all'interno di un elemento PermissionsSet che fa riferimento alla classe ReflectionPermission. È necessario modificare questo elemento quando si utilizza LINQ.

Nell'elemento PermissionSet con l'attributo Name impostato su "ASP.Net", trovare l'elemento IPermission per ReflectionPermission e impostarlo nel modo seguente:

<IPermission
  class="ReflectionPermission"
  version="1"
  Flags="ReflectionEmit, RestrictedMemberAccess"
/>
Nota:

È probabile che questo elemento sia stato modificato durante il processo di installazione.

Vedere anche

Concetti

Cenni preliminari sul controllo server Web LinqDataSource

Altre risorse

LINQ (Language-Integrated Query)