Condividi tramite


Linee guida per la creazione di servizi RIA WCF per LightSwitch

In questo argomento vengono fornite linee guida per la creazione e l'utilizzo di servizi RIA (Rich Internet Application) di Windows Communication Foundation (WCF) in un'applicazione basata su LightSwitch.In questo argomento vengono fornite informazioni sulle attività seguenti:

  • Archiviazione, recupero e utilizzo di stringhe di connessione nella classe di servizio del dominio di un servizio RIA WCF

  • Definizione dei metodi di query per l'utilizzo in un'applicazione basata su LightSwitch

  • Applicazione di attributi ai campi di un'entità

Per ulteriori informazioni generali sulla progettazione di servizi RIA WCF, vedere Servizi RIA WCF.

Archiviazione, recupero e utilizzo di stringhe di connessione

Per connettersi ai dati dall'interno della classe di servizio del dominio di un servizio RIA WCF, il codice deve passare una stringa di connessione al provider dell'origine dati.Gli sviluppatori che utilizzano il servizio possono archiviare la stringa di connessione nel file web.config dell'applicazione LightSwitch quando si connettono al servizio.Nella classe di servizio del dominio del servizio RIA WCF, il codice può recuperare e utilizzare la stringa di connessione.

Gg589479.collapse_all(it-it,VS.110).gifArchiviazione della stringa di connessione

Gli sviluppatori forniscono una stringa di connessione all'origine dati quando si connettono al servizio RIA WCF in LightSwitch.La stringa di connessione viene salvata nel file web.config dell'applicazione LightSwitch.Per ulteriori informazioni, vedere Procedura: connettersi ai dati.

Per aiutare gli sviluppatori a fornire la stringa di connessione corretta, è possibile fornire testo utile in cui viene descritto il formato previsto della stringa.Questo testo viene visualizzato nella casella Stringa di connessione di Associazione guidata origine dati.Per fornire questo testo, aggiungere un attributo DescriptionAttribute all'inizio della classe di servizio del dominio.

Gg589479.collapse_all(it-it,VS.110).gifRecupero di una stringa di connessione

Nella classe di servizio del dominio del servizio RIA WCF, il codice può recuperare la stringa di connessione dal file web.config facendo riferimento al nome completo della classe di servizio del dominio (ad esempio, CustomerNamespace.CustomerService).Nell'esempio seguente viene recuperata una stringa di connessione eseguendo l'override del metodo Initialize della classe di servizio del dominio.Se non viene trovata alcuna stringa di connessione, viene utilizzata una stringa di connessione hardcoded.

Public Overrides Sub Initialize _
    (context As System.ServiceModel.DomainServices.Server.DomainServiceContext)
    
    If (WebConfigurationManager.ConnectionStrings.Item(Me.[GetType]().FullName) _
        Is Nothing) OrElse [String].IsNullOrWhiteSpace _
    (WebConfigurationManager.ConnectionStrings.Item _
     (Me.[GetType]().FullName).ConnectionString) Then
        
        _connectionString = "data source=NorthwindDB;initial catalog= " _
            & "Northwind;user id=myID;password=myPassword"
    Else
        _connectionString = WebConfigurationManager.ConnectionStrings.Item _
            (Me.[GetType]().FullName).ConnectionString
    End If

    MyBase.Initialize(context)
End Sub
        
string _connectionString;
public override void Initialize
    (System.ServiceModel.DomainServices.Server.DomainServiceContext context)
    {
        if ((WebConfigurationManager.ConnectionStrings
            [(this.GetType().FullName)] == null) || 
            String.IsNullOrWhiteSpace(WebConfigurationManager.ConnectionStrings
            [this.GetType().FullName].ConnectionString))
        {
            _connectionString = "data source=NorthwindDB;initial catalog= " + 
                "Northwind;user id=myID;password=myPassword";
        }
        else
        {
            _connectionString = WebConfigurationManager.ConnectionStrings
                [this.GetType().FullName].ConnectionString;
        }
        base.Initialize(context);
    }

Gg589479.collapse_all(it-it,VS.110).gifUtilizzo della stringa di connessione

Nella classe di servizio del dominio, è possibile utilizzare la stringa di connessione per effettuare la connessione ai dati in qualsiasi modalità desiderata.Tuttavia, alcune tecnologie disponibili in Visual Studio richiedono l'utilizzo della stringa di connessione in modalità specifiche.Ad esempio, se nel servizio si generano le entità tramite un Entity Data Model ADO.NET, il codice dovrà restituire la stringa di connessione nel metodo CreateObjectContext.L'esempio seguente è basato su un scenario nel quale è stato utilizzato un ADO.NET Entity Data Model per generare le entità fornite dal servizio.Questo esempio sostituisce il metodo CreateObjectContext e restituisce la stringa di connessione al provider di Entity Framework.

Protected Overrides Function CreateObjectContext() As NorthwindEntities
    Dim Connection As New EntityConnectionStringBuilder()
    Connection.ProviderConnectionString = _connectionString
    Connection.Provider = "System.Data.SqlClient"
    Connection.Metadata = "res://*/NorthwindModel.csdl|" & _
                 "res://*/NorthwindModel.ssdl|" & _
                 "res://*/NorthwindModel.msl"

    Return New NorthwindEntities(Connection.ToString)
End Function
protected override NorthwindEntities2 CreateObjectContext()
{
    EntityConnectionStringBuilder Connection = new EntityConnectionStringBuilder();
    Connection.ProviderConnectionString = _connectionString;
    Connection.Provider = "System.Data.SqlClient";
    Connection.Metadata = "res://*/NorthwindModel.csdl|" +
                 "res://*/NorthwindModel.ssdl|" +
                 "res://*/NorthwindModel.msl";
    return new NorthwindEntities2(Connection.ToString());
}

Definizione di metodi di query utilizzati in LightSwitch

Per ogni entità nella classe di servizio del dominio, è necessario identificare un metodo predefinito che può essere utilizzato in LightSwitch per la restituzione di una raccolta di entità.È inoltre possibile definire altri metodi che restituiscono dati.

Gg589479.collapse_all(it-it,VS.110).gifIdentificazione di un metodo di query utilizzato da LightSwitch per impostazione predefinita

Tutte le entità di LightSwitch dispongono almeno di un metodo che restituisce una raccolta.Questo metodo viene visualizzato in LightSwitch e consente agli sviluppatori di creare schermate in cui vengono visualizzati elenchi di informazioni, quali clienti o ordini.È necessario identificare il metodo che si desidera che venga utilizzato da LightSwitch come metodo di raccolta predefinito per qualsiasi entità specificata nella classe di servizio del dominio.Per identificare questo metodo, applicare l'attributo QueryAttribute al metodo.Impostare la proprietà IsDefault di QueryAttribute su True.Questo metodo deve restituire un IEnumerable<T> o un IQueryable<T> del tipo di entità.La raccolta restituita dal metodo deve contenere tutti i campi dell'entità.La query non deve accettare parametri.Nell'esempio seguente viene applicato l'attributo QueryAttribute al GetCustomers metodo di query dell'entità Customers.

<Query(IsDefault:=True)> _
Public Function GetCustomers() As IQueryable(Of Customer)
    Return Me.ObjectContext.Customers
End Function
[Query(IsDefault=true)]
public IQueryable<Customer> GetCustomers()
{
    return this.ObjectContext.Customers;
}

Gg589479.collapse_all(it-it,VS.110).gifCreazione di altri metodi di query

È possibile creare tutti i metodi di query desiderati.Ogni metodo di query può restituire una o più entità in base alla logica personalizzata aggiunta al metodo.In LightSwitch, è possibile eseguire questi metodi nella logica di business o utilizzarli per visualizzare i dati in una schermata.I metodi di query devono restituire un tipo di entità o un IEnumerable<T> o IQueryable<T> di un tipo di entità.I parametri dei metodi devono essere nullable e tipi semplici supportati da LightSwitch.Per ulteriori informazioni sui tipi nullable, vedere Tipi di valori nullable (Visual Basic) o Tipi nullable (Guida per programmatori C#).Per ulteriori informazioni sui tipi semplici supportati in LightSwitch, vedere Procedura: definire i campi dati.

Applicazione di attributi a campi entità

È possibile applicare attributi ai campi di entità nella classe di servizio del dominio.Nella tabella seguente vengono fornite informazioni aggiuntive su come utilizzare gli attributi per ottenere l'effetto desiderato in LightSwitch.

Attributo

Utilizzo della proprietà in LightSwitch

AssociationAttribute

Per le relazioni uno-a-molti, impostare la proprietà ThisKey sulla chiave primaria dell'entità esistente sul lato uno della relazione.

Per una relazione zero-a-molti o uno-a-molti impostare la proprietà ThisKey sulla chiave primaria dell'entità esistente sul lato zero o uno della relazione.

Per una relazione zero-o-uno, impostare la proprietà ThisKey sulla chiave primaria dell'entità esistente sul lato uno della relazione.Impostare la proprietà OtherKey sulla chiave primaria dell'entità esistente sul lato zero o uno della relazione.

DisplayAttribute

In LightSwitch, utilizzare la proprietà ShortName o Name per specificare il nome che si desidera visualizzare per questo campo.Utilizzare la proprietà Description per specificare il testo che si desidera che venga visualizzato come descrizione comando quando gli utenti puntano a un controllo contenente il campo di una schermata.

EditableAttribute

In LightSwitch, se si imposta la proprietà AllowEdit su False, la proprietà ReadOnly del campo viene impostata su True.

EnumDataTypeAttribute

Se si imposta la proprietà EnumType su un'enumerazione, LightSwitch crea un elenco di scelte per il campo utilizzando i valori dell'enumerazione.

KeyAttribute

In LightSwitch, utilizzare l'attributo KeyAttribute se si desidera che il campo venga utilizzato come chiave primaria dell'entità.È possibile specificare più chiavi.

RangeAttribute

Utilizzare questo attributo per impostare i valori massimo e minimo del campo.Questo attributo non ha alcun effetto sui tipi di dati non numerici.

RequiredAttribute

In LightSwitch, questa proprietà influisce solo sui campi che dispongono di un tipo di stringa.Se si imposta la proprietà AllowEmptyStrings di questo attributo su False, in LightSwitch, la proprietà Obbligatorio del campo viene impostata su True.

ScaffoldColumnAttribute

In LightSwitch, se si imposta la proprietà Scaffold su True, la proprietà Visualizzazione predefinita viene impostata su True.

StringLengthAttribute

In LightSwitch, utilizzare la proprietà MaximumLength per impostare la proprietà Lunghezza massima del campo.

StringLengthAttribute

In LightSwitch se si applica questo attributo, la proprietà Visualizzazione predefinita del campo viene impostata su False.

Gli attributi seguenti non hanno effetto in LightSwitch:

  • ConcurrencyCheck

  • DataType

  • DisplayColumn

  • DisplayFormat

  • FilterUIHint

  • MetadataType

  • RegularExpression

  • ScaffoldTable

  • UIHintAttribute