次の方法で共有


LightSwitch 用の WCF RIA サービスの作成に関するガイドライン

このトピックでは、LightSwitch ベースのアプリケーションで Windows Communication Foundation (WCF) Rich Internet Application (RIA) サービスを作成して使用するためのガイドラインを提供します。 ここでは、次のタスクに関する情報について説明します。

  • WCF RIA サービスのドメイン サービス クラスでの接続文字列の保存、取得、および使用

  • LightSwitch ベースのアプリケーションで使用するクエリ メソッドの定義

  • エンティティのフィールドに属性を適用

WCF RIA サービスの設計に関するより一般的な情報については、「WCF RIA サービス」を参照してください。

接続文字列の保存、取得、および使用

WCF RIA サービスのドメイン サービス クラス内からデータに接続するには、コードが接続文字列をデータ ソース プロバイダーに渡す必要があります。 サービスを利用する開発者は、サービスへの接続の際に LightSwitch アプリケーションの web.config ファイルに接続文字列を格納できます。 WCF RIA サービスのドメイン サービス クラスでは、コードは接続文字列を取得し、使用できます。

接続文字列の保存

開発者は、LightSwitch で WCF RIA サービスに接続するときにデータ ソースの接続文字列を提供します。 接続文字列は、LightSwitch アプリケーションの web.config ファイルに保存されます。 詳細については、「方法: データに接続する」を参照してください。

開発者が正しい接続文字列を提供できるよう、文字列の形式について説明するテキストを提供できます。 このテキストは、データ ソースの添付ウィザード[接続文字列] ボックスに表示されます。 このテキストを提供するには、ドメイン サービス クラスの先頭に 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 の一部の技術では、特定の方法で接続文字列を使用することが必要です。 たとえば、ADO.NET エンティティ データ モデルを使用してサービスのエンティティを生成する場合、コードは、CreateObjectContext メソッドで接続文字列を返す必要があります。 次の例は、サービスが提供したエンティティを生成するために ADO.NET エンティティ データ モデルを使用したシナリオに基づいています。 この例は、CreateObjectContext メソッドをオーバーライドし、エンティティ フレームワークのプロバイダーに接続文字列を返します。

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 のすべてのエンティティには、コレクションを返す少なくとも 1 つのメソッドがあります。 このメソッドは、LightSwitch に表示され、開発者が顧客や注文などの情報の一覧を表示する画面を作成できるようにします。 ドメイン サービス クラスの各エンティティについて、既定のコレクション メソッドとして LightSwitch が使用するメソッドを指定する必要があります。 このメソッドを識別するには、メソッドに QueryAttribute 属性を適用します。 QueryAttributeIsDefault プロパティを True に設定します。 このメソッドは、エンティティ型の IEnumerable または IQueryable を返す必要があります。 メソッドによって返されるコレクションには、エンティティのすべてのフィールドが含まれている必要があります。 クエリはパラメーターを受け入れません。 次の例は、QueryAttribute 属性を Customers エンティティの GetCustomers クエリ メソッドに適用しています。

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

他のクエリ メソッドを作成

クエリ メソッドは必要な数だけ作成できます。 各クエリ メソッドは、メソッドに追加するカスタム ロジックに基づいて 1 つまたは複数のエンティティを返すことができます。 LightSwitch では、これらのメソッドは、ビジネス ロジックで実行する、または画面にデータを表示するために使用できます。 クエリ メソッドは、エンティティ型、またはエンティティ型の IEnumerable または IQueryable を返す必要があります。 メソッド パラメーターは LightSwitch でサポートされている null 許容型および単純型にする必要があります。 NULL 許容型の詳細については、「null 許容値型 (Visual Basic)」または「null 許容型 (C# プログラミング ガイド)」を参照してください。 LightSwitch でサポートされる単純型の詳細については、「方法: LightSwitch データベースのデータ フィールドを定義する」を参照してください。

エンティティ フィールドに属性を適用

ドメイン サービス クラスのエンティティのフィールドに属性を適用できます。 次の表は、属性を使用して LightSwitch で希望する効果を達成するためのガイダンスを示しています。

属性

LightSwitch でこのプロパティを使用

AssociationAttribute

1 対多のリレーションシップについては、ThisKey プロパティをリレーションシップの 1 の側に存在するエンティティの主キーに設定します。

0 または 1 対多のリレーションシップについては、ThisKey プロパティをリレーションシップの 0 または 1 の側に存在するエンティティの主キーに設定します。

1 対 0 または 1 のリレーションシップについては、ThisKey プロパティをリレーションシップの 1 の側に存在するエンティティの主キーに設定します。 OtherKey プロパティを、リレーションシップの 0 対 1 の側に存在するエンティティの主キーに設定します。

DisplayAttribute

LightSwitch では、このフィールドに表示する名前を指定するには、ShortName プロパティまたは Name プロパティを使用します。 Description プロパティを使用して、画面にフィールドのあるコントロールをユーザーがポイントした場合にツールヒントとして表示されるテキストを指定します。

EditableAttribute

LightSwitch では、AllowEdit プロパティを False に設定すると、フィールドの ReadOnly プロパティは True に設定されます。

EnumDataTypeAttribute

EnumType プロパティを列挙型に設定すると、LightSwitch は列挙型の値を使用してフィールドに選択リストを作成します。

KeyAttribute

LightSwitch では、フィールドをエンティティの主キーとして使用する場合は、KeyAttribute 属性を使用します。 複数のキーを指定できます。

RangeAttribute

この属性を使用して、フィールドの最大値と最小値を設定します。 この属性は数値以外のデータ型に影響しません。

RequiredAttribute

LightSwitch では、このプロパティは文字列型を持つフィールドにのみ影響します。 この属性の AllowEmptyStrings プロパティを False に設定する場合、LightSwitch では、フィールドの [必須] プロパティは True に設定されます。

ScaffoldColumnAttribute

LightSwitch では、Scaffold プロパティを True に設定すると、[Display By Default] プロパティは True に設定されます。

StringLengthAttribute

LightSwitch で、MaximumLength プロパティを使用して、フィールドの [最大長] プロパティを設定します。

StringLengthAttribute

LightSwitch では、この属性を適用すると、このフィールドの [既定で表示] プロパティは False に設定されます。

次の属性は LightSwitch に影響しません。

  • ConcurrencyCheck

  • DataType

  • DisplayColumn

  • DisplayFormat

  • FilterUIHint

  • MetadataType

  • RegularExpression

  • ScaffoldTable

  • UIHintAttribute