Поделиться через


Рекомендации по созданию служб WCF RIA для LightSwitch

В этом разделе содержатся рекомендации по созданию и использованию служб WCF RIA в приложении на основе LightSwitch.В этом разделе содержатся сведения о выполнении следующих задач:

  • Хранение, извлечение и использование строк подключения в классе службы домена службы WCF RIA

  • Определение методов запроса, используемых в приложении на основе LightSwitch

  • Применение атрибутов к полям сущности

Общие сведения о разработке служб WCF RIA см. в статье, посвященной службам WCF RIA.

Хранение, извлечение и использование строк подключения

Чтобы подключиться к данным посредством класса службы домена службы WCF RIA, в коде необходимо реализовать передачу строки подключения провайдеру источника данных.Разработчики, которые используют службу, при подключении к службе могут сохранять строки подключения в файле web.config приложения LightSwitch.В коде класса службы домена службы WCF RIA можно получать и использовать строку подключения.

Gg589479.collapse_all(ru-ru,VS.110).gifХранение строки подключения

Разработчики предоставляют строку подключения при подключении к службе WCF RIA в LightSwitch.Строка подключения сохраняется в файле web.config приложения LightSwitch.Дополнительные сведения см. в разделе Практическое руководство. Подключение к данным.

Чтобы помочь разработчикам в формировании правильной строки подключения, можно предоставить текстовую подсказку, в которой будет описан ожидаемый формат строки.Этот текст отображается в поле Строка подключенияМастера подключения источника данных.Чтобы предоставить этот текст, добавьте атрибут DescriptionAttribute в начало класса службы домена.

Gg589479.collapse_all(ru-ru,VS.110).gifИзвлечение строки подключения

В классе службы домена службы 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);
    }

Gg589479.collapse_all(ru-ru,VS.110).gifИспользование строки подключения

В классе службы домена можно использовать строку подключения для подключения к данным любым способом.Однако, некоторые технологии в 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 для возврата коллекции сущностей.Также можно определить другие методы, которые возвращают данные.

Gg589479.collapse_all(ru-ru,VS.110).gifОпределение метода запроса, который используется в 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;
}

Gg589479.collapse_all(ru-ru,VS.110).gifСоздание других методов запроса

Можно создать любое количество методов запроса.Каждый метод запроса может возвращать одну или несколько сущностей, основанных на настраиваемой логике, которая добавлена в метод.В LightSwitch можно запускать эти методы в бизнес-логике или использовать их для отображения данных на экране.Методы запросов должны возвращать тип сущности или коллекцию IEnumerable<T> или IQueryable<T> типа сущности.Параметры метода должны допускать значения NULL и иметь простой тип, который поддерживается в LightSwitch.Дополнительные сведения о допускающих значение NULL типах файлов см. в разделах Типы значения, допускающие Null (Visual Basic) и Типы, допускающие значения NULL (Руководство по программированию на C#).Дополнительные сведения о простых типах файлов, поддерживаемых в LightSwitch, см. в разделе Практическое руководство. Определение полей данных.

Применение атрибутов к полям сущности

Атрибуты можно применять к полям сущностей в классе службы домена.В следующей таблице приведены рекомендации по использованию атрибутов для реализации необходимых возможностей в LightSwitch.

Атрибут

Использование этого свойства в LightSwitch

AssociationAttribute

Для отношений «один ко многим» присвойте свойству ThisKey значение первичного ключа сущности, которая находится на стороне «один» отношения.

Для отношений «ноль ко многим» или «один ко многим» присвойте свойству ThisKey значение первичного ключа сущности, которая существует на стороне «ноль» или «один» отношения.

Для отношений «один к нулю» или «один к одному» присвойте свойству ThisKey значение первичного ключа сущности, которая существует на стороне «один» отношения.Присвойте свойству OtherKey значение первичного ключа сущности, которая существует на стороне «ноль к одному» отношения.

DisplayAttribute

В LightSwitch используйте атрибут ShortName или Name, чтобы задать имя, которое требуется отображать для этого поля.Используйте свойство Description, чтобы задать текст, который будет отображаться в виде всплывающей подсказки при наведении пользователем указателя мыши на элемент управления, который содержит поле, на экране.

EditableAttribute

В LightSwitch, если свойству AllowEdit присвоено значение False, то свойству ReadOnly присваивается значение True.

EnumDataTypeAttribute

Если свойству EnumType было присвоено перечисление, то в LightSwitch будет создан список выбора для поля на основе значений перечисления.

KeyAttribute

В LightSwitch используйте атрибут KeyAttribute, чтобы использовать поле в качестве первичного ключа сущности.Можно задать несколько ключей.

RangeAttribute

Этот атрибут используется для установки максимального и минимального значений поля.Этот атрибут не влияет на нечисловые типы данных.

RequiredAttribute

В LightSwitch это свойство влияет только на поля строкового типа.Если присвоить свойству AllowEmptyStrings этого атрибута значение False, то в LightSwitch свойству Is Required поля присваивается значение True.

ScaffoldColumnAttribute

В LightSwitch, если свойству Scaffold было присвоено значение True, то свойству Отобразить по умолчанию будет присваивоено значение True.

StringLengthAttribute

В LightSwitch используйте свойство MaximumLength, чтобы задать значение свойства Максимальная длина для поля.

StringLengthAttribute

В LightSwitch при применении этого атрибута свойству Отображение по умолчанию присваивается значение False.

Следующие атрибуты в LightSwitch не действуют:

  • ConcurrencyCheck

  • DataType

  • DisplayColumn

  • DisplayFormat

  • FilterUIHint

  • MetadataType

  • RegularExpression

  • ScaffoldTable

  • UIHintAttribute