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


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

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

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

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

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

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

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

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

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

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

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

Извлечение строки подключения

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

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

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

Атрибут

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

AssociationAttribute

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

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

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

DisplayAttribute

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

EditableAttribute

В LightSwitch, если задать свойству AllowEdit значение False, свойству Доступный только для чтения поля задается значение True.

EnumDataTypeAttribute

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

KeyAttribute

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

RangeAttribute

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

RequiredAttribute

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

ScaffoldColumnAttribute

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

StringLengthAttribute

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

StringLengthAttribute

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

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

  • ConcurrencyCheck

  • DataType

  • DisplayColumn

  • DisplayFormat

  • FilterUIHint

  • MetadataType

  • RegularExpression

  • ScaffoldTable

  • UIHintAttribute