Partilhar via


Diretrizes para criar serviços RIA WCF para LightSwitch

Este tópico fornece diretrizes para criar e consumir serviços RIA (Rich Internet Application) do Windows Communication Foundation (WCF) em um aplicativo baseado no LightSwitch. Este tópico fornece informações sobre as seguintes tarefas:

  • Armazenar, recuperar e consumir cadeias de conexão na classe de serviço do domínio de um serviço RIA WCF

  • Definir métodos de consulta a serem usados em um aplicativo baseado no LightSwitch

  • Aplicar atributos aos campos de uma entidade

Para obter mais informações gerais sobre como criar serviços RIA WCF, consulte Serviços RIA WCF.

Armazenando, recuperando e consumindo cadeias de conexão

Para se conectar a dados dentro da classe de serviço do domínio de um serviço WCF RIA, seu código deve passar uma cadeia de conexão para o provedor da fonte de dados. Os desenvolvedores que consomem o serviço podem armazenar a cadeia de conexão no arquivo web.config do aplicativo LightSwitch quando se conectam ao serviço. Na classe de serviço do domínio do serviço RIA WCF, seu código pode recuperar e consumir a cadeia de conexão.

Armazenando a cadeia de conexão

Os desenvolvedores fornecem uma cadeia de conexão da fonte de dados quando se conectam ao serviço RIA WCF em LightSwitch. A cadeia de conexão é salva no arquivo web.config do aplicativo LightSwitch. Para obter mais informações, consulte Como conectar a dados.

Para ajudar os desenvolvedores no fornecimento da cadeia de conexão correta, você pode fornecer um texto útil que descreva o formato esperado da cadeia de caracteres. Esse texto aparece na caixa Cadeia de Conexão do Assistente para Anexar Fonte de Dados. Para fornecer esse texto, adicione um atributo DescriptionAttribute à parte superior da classe de serviço do domínio.

Recuperando a cadeia de conexão

Na classe de serviço do domínio do serviço RIA WCF, seu código pode recuperar a cadeia de conexão com base no arquivo web.config referenciando o nome totalmente qualificado da classe de serviço do domínio (por exemplo, CustomerNamespace.CustomerService). O exemplo a seguir recupera uma cadeia de conexão substituindo o método Inicializar da classe de serviço do domínio. Se nenhuma cadeia de conexão for encontrada, uma cadeia de conexão codificada será usada.

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

Consumindo a cadeia de conexão

Na classe de serviço do domínio, você pode usar a cadeia de conexão para se conectar aos dados da forma que desejar. No entanto, algumas tecnologias no Visual Studio exigem que você use a cadeia de conexão de maneiras específicas. Por exemplo, se você gerar as entidades no serviço usando um Modelo de Dados da Entidade do ADO.NET, seu código deverá retornar a cadeia de conexão no método CreateObjectContext. O exemplo a seguir é baseado em uma situação em que você usou um Modelo de Dados da Entidade do ADO.NET para gerar as entidades fornecidas pelo serviço. Esse exemplo substitui o método CreateObjectContext e retorna a cadeia de conexão para o provedor 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());
}

Definindo os métodos de consulta consumidos em LightSwitch

Para cada entidade em sua classe de serviço de domínio, você deve identificar um método padrão que LightSwitch pode usar para retornar uma coleção de entidades. Você também pode definir outros métodos que retornem dados.

Identificando um método de consulta que LightSwitch usa por padrão

Todas as entidades em LightSwitch têm pelo menos um método que retorna uma coleção. Este método aparece em LightSwitch e permite que desenvolvedores criem telas que mostrem listas de informações, como clientes ou pedidos. Você deve identificar o método que você deseja que LightSwitch use como o método padrão de coleção para qualquer entidade fornecida em sua classe de serviço do domínio. Para identificar esse método, aplique o atributo QueryAttribute ao método. Defina a propriedade IsDefault do QueryAttribute como True. Esse método deve retornar IEnumerable ou IQueryable do tipo de entidade. A coleção retornada pelo método deve conter todos os campos da entidade. A consulta não deve aceitar nenhum parâmetro. O exemplo a seguir aplica o atributo QueryAttribute ao método de consulta GetCustomers da entidade 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;
}

Criando outros métodos de consulta

Você pode criar quantos métodos de consulta quiser. Cada método de consulta pode retornar uma ou mais entidades com base na lógica personalizada que você adiciona ao método. Em LightSwitch, você pode executar esses métodos em sua lógica de negócio ou usá-los para exibir dados em uma tela. Os métodos de consulta devem retornar um tipo de entidade, ou IEnumerable ou IQueryable de um tipo de entidade. Os parâmetros do método devem ser anuláveis e tipos simples compatíveis com LightSwitch. Para obter mais informações sobre tipos anuláveis, consulte Tipos de valor que permitem valor nulo (Visual Basic) ou Tipos anuláveis (Guia de Programação em C#). Para obter mais informações sobre tipos simples compatíveis com LightSwitch, consulte Como definir campos de dados em um banco de dados LightSwitch.

Aplicando atributos a campos de entidade

Você pode aplicar atributos aos campos de entidades em sua classe de serviço do domínio. A tabela a seguir fornece orientação sobre como usar atributos para obter o efeito que você deseja em LightSwitch.

Atributo

Usando essa propriedade em LightSwitch

AssociationAttribute

Para relações um-para-muitos, defina a propriedade ThisKey como a chave primária da entidade existente em um dos lados da relação.

Para relações zero ou um-para-muitos, defina a propriedade ThisKey como a chave primária da entidade existente em zero ou um dos lados da relação.

Para relações zero ou um-para-muitos, defina a propriedade ThisKey como a chave primária da entidade existente em um dos lados da relação. Defina a propriedade OtherKey como a chave primária da entidade existente no lado zero-para-um da relação.

DisplayAttribute

Em LightSwitch, use a propriedade ShortName ou Nome para especificar o nome que você deseja exibir para esse campo. Use a propriedade Descrição para especificar o texto que você deseja que apareça como uma dica de ferramenta quando usuários apontarem para um controle que contenha o campo em uma tela.

EditableAttribute

Em LightSwitch, se você definir AllowEdit a propriedade como False, a propriedade ReadOnly do campo será definida como True.

EnumDataTypeAttribute

Se você definir a propriedade EnumType como uma enumeração, LightSwitch criará uma lista de opções para o campo usando os valores da enumeração.

KeyAttribute

No LightSwitch, use o atributo KeyAttribute se você quiser que o campo seja usado como a chave primária da entidade. Você pode especificar várias chaves.

RangeAttribute

Use esse atributo para definir os valores mínimo e máximo do campo. Esse atributo não entra em vigor em tipos de dados não numéricos.

RequiredAttribute

Em LightSwitch, essa propriedade afeta somente os campos que tenham um tipo de cadeia de caracteres. Se você definir a propriedade AllowEmptyStrings desse atributo como False, no LightSwitch, a propriedade É Obrigatório será definida como True.

ScaffoldColumnAttribute

No LightSwitch, se você definir a propriedade Scaffold como True, a propriedade Exibir por Padrão será definida como Verdadeiro.

StringLengthAttribute

No LightSwitch, use a propriedade MaximumLength para definir a propriedade Comprimento Máximo do campo.

StringLengthAttribute

No LightSwitch, se você aplicar esse atributo, a propriedade Exibir por Padrão do campo será definida como False.

Os seguintes atributos não entram em vigor no LightSwitch:

  • ConcurrencyCheck

  • DataType

  • DisplayColumn

  • DisplayFormat

  • FilterUIHint

  • MetadataType

  • RegularExpression

  • ScaffoldTable

  • UIHintAttribute