Рекомендации по созданию служб WCF RIA для LightSwitch
В этом разделе содержатся рекомендации по созданию и использованию служб WCF RIA в приложении на основе LightSwitch.В этом разделе содержатся сведения о выполнении следующих задач:
Хранение, извлечение и использование строк подключения в классе службы домена службы WCF RIA
Определение методов запроса, используемых в приложении на основе LightSwitch
Применение атрибутов к полям сущности
Общие сведения о разработке служб WCF RIA см. в статье, посвященной службам WCF RIA.
Хранение, извлечение и использование строк подключения
Чтобы подключиться к данным посредством класса службы домена службы WCF RIA, в коде необходимо реализовать передачу строки подключения провайдеру источника данных.Разработчики, которые используют службу, при подключении к службе могут сохранять строки подключения в файле web.config приложения LightSwitch.В коде класса службы домена службы WCF RIA можно получать и использовать строку подключения.
Хранение строки подключения
Разработчики предоставляют строку подключения при подключении к службе WCF RIA в LightSwitch.Строка подключения сохраняется в файле web.config приложения LightSwitch.Дополнительные сведения см. в разделе Практическое руководство. Подключение к данным.
Чтобы помочь разработчикам в формировании правильной строки подключения, можно предоставить текстовую подсказку, в которой будет описан ожидаемый формат строки.Этот текст отображается в поле Строка подключенияМастера подключения источника данных.Чтобы предоставить этот текст, добавьте атрибут DescriptionAttribute в начало класса службы домена.
Извлечение строки подключения
В классе службы домена службы WCF RIA код может извлекать строку подключения из файла web.config, ссылаясь на полное имя класса службы домена (например, CustomerNamespace.CustomerService).В следующем примере демонстрируется извлечение строки подключения путем переопределения метода Initialize.Если строка подключения не найдена, используется жестко запрограммированная строка подключения.
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);
}
Использование строки подключения
В классе службы домена можно использовать строку подключения для подключения к данным любым способом.Однако, некоторые технологии в Visual Studio требуют особого использования строк подключения.Например, при создании в службе сущности с помощью модели EDM ADO.NET, код должен вернуть строку подключения в методе CreateObjectContext.Следующий пример основан на сценарии, в котором для создания сущностей, предоставляемых службой, используется модель данных сущностей ADO.NET.В этом примере переопределяется метод CreateObjectContext и возвращается строка подключения с провайдером 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());
}
Определение методов запроса, которые используются в LightSwitch
Для каждой сущности в классе службы домена необходимо определить метод по умолчанию, который может использоваться в LightSwitch для возврата коллекции сущностей.Также можно определить другие методы, которые возвращают данные.
Определение метода запроса, который используется в LightSwitch по умолчанию
Все сущности в LightSwitch имеют по крайней мере один метод, который возвращает коллекцию.Этот метод представлен в LightSwitch и позволяет разработчикам создавать экраны, на которых отображаются списки данных, например, со сведениями о клиентах или заказах.Для каждой сущности в классе службы домена необходимо определить метод, который будет использоваться в LightSwitch в качестве метода коллекции по умолчанию.Чтобы идентифицировать этот метод, примените к нему атрибут QueryAttribute.Установите свойству IsDefault объекта QueryAttribute значение True.Этот метод должен вернуть коллекцию IEnumerable<T> или IQueryable<T> типа сущности.Коллекция, возвращаемая методом, должна содержать все поля сущности.Запрос не должен принимать какие-либо параметры.В следующем примере атрибут QueryAttribute метода запроса GetCustomers применяется к сущности 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;
}
Создание других методов запроса
Можно создать любое количество методов запроса.Каждый метод запроса может возвращать одну или несколько сущностей, основанных на настраиваемой логике, которая добавлена в метод.В LightSwitch можно запускать эти методы в бизнес-логике или использовать их для отображения данных на экране.Методы запросов должны возвращать тип сущности или коллекцию IEnumerable<T> или IQueryable<T> типа сущности.Параметры метода должны допускать значения NULL и иметь простой тип, который поддерживается в LightSwitch.Дополнительные сведения о допускающих значение NULL типах файлов см. в разделах Типы значения, допускающие Null (Visual Basic) и Типы, допускающие значения NULL (Руководство по программированию на C#).Дополнительные сведения о простых типах файлов, поддерживаемых в LightSwitch, см. в разделе Практическое руководство. Определение полей данных.
Применение атрибутов к полям сущности
Атрибуты можно применять к полям сущностей в классе службы домена.В следующей таблице приведены рекомендации по использованию атрибутов для реализации необходимых возможностей в LightSwitch.
Атрибут |
Использование этого свойства в LightSwitch |
---|---|
Для отношений «один ко многим» присвойте свойству ThisKey значение первичного ключа сущности, которая находится на стороне «один» отношения. Для отношений «ноль ко многим» или «один ко многим» присвойте свойству ThisKey значение первичного ключа сущности, которая существует на стороне «ноль» или «один» отношения. Для отношений «один к нулю» или «один к одному» присвойте свойству ThisKey значение первичного ключа сущности, которая существует на стороне «один» отношения.Присвойте свойству OtherKey значение первичного ключа сущности, которая существует на стороне «ноль к одному» отношения. |
|
В LightSwitch используйте атрибут ShortName или Name, чтобы задать имя, которое требуется отображать для этого поля.Используйте свойство Description, чтобы задать текст, который будет отображаться в виде всплывающей подсказки при наведении пользователем указателя мыши на элемент управления, который содержит поле, на экране. |
|
В LightSwitch, если свойству AllowEdit присвоено значение False, то свойству ReadOnly присваивается значение True. |
|
Если свойству EnumType было присвоено перечисление, то в LightSwitch будет создан список выбора для поля на основе значений перечисления. |
|
В LightSwitch используйте атрибут KeyAttribute, чтобы использовать поле в качестве первичного ключа сущности.Можно задать несколько ключей. |
|
Этот атрибут используется для установки максимального и минимального значений поля.Этот атрибут не влияет на нечисловые типы данных. |
|
В LightSwitch это свойство влияет только на поля строкового типа.Если присвоить свойству AllowEmptyStrings этого атрибута значение False, то в LightSwitch свойству Is Required поля присваивается значение True. |
|
В LightSwitch, если свойству Scaffold было присвоено значение True, то свойству Отобразить по умолчанию будет присваивоено значение True. |
|
В LightSwitch используйте свойство MaximumLength, чтобы задать значение свойства Максимальная длина для поля. |
|
В LightSwitch при применении этого атрибута свойству Отображение по умолчанию присваивается значение False. |
Следующие атрибуты в LightSwitch не действуют:
ConcurrencyCheck
DataType
DisplayColumn
DisplayFormat
FilterUIHint
MetadataType
RegularExpression
ScaffoldTable
UIHintAttribute