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 |
---|---|
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. |
|
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. |
|
Em LightSwitch, se você definir AllowEdit a propriedade como False, a propriedade ReadOnly do campo será definida como True. |
|
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. |
|
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. |
|
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. |
|
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. |
|
No LightSwitch, se você definir a propriedade Scaffold como True, a propriedade Exibir por Padrão será definida como Verdadeiro. |
|
No LightSwitch, use a propriedade MaximumLength para definir a propriedade Comprimento Máximo do campo. |
|
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