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 属性を適用します。 QueryAttribute の IsDefault プロパティを 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 でこのプロパティを使用 |
---|---|
1 対多のリレーションシップについては、ThisKey プロパティをリレーションシップの 1 の側に存在するエンティティの主キーに設定します。 0 または 1 対多のリレーションシップについては、ThisKey プロパティをリレーションシップの 0 または 1 の側に存在するエンティティの主キーに設定します。 1 対 0 または 1 のリレーションシップについては、ThisKey プロパティをリレーションシップの 1 の側に存在するエンティティの主キーに設定します。 OtherKey プロパティを、リレーションシップの 0 対 1 の側に存在するエンティティの主キーに設定します。 |
|
LightSwitch では、このフィールドに表示する名前を指定するには、ShortName プロパティまたは Name プロパティを使用します。 Description プロパティを使用して、画面にフィールドのあるコントロールをユーザーがポイントした場合にツールヒントとして表示されるテキストを指定します。 |
|
LightSwitch では、AllowEdit プロパティを False に設定すると、フィールドの ReadOnly プロパティは True に設定されます。 |
|
EnumType プロパティを列挙型に設定すると、LightSwitch は列挙型の値を使用してフィールドに選択リストを作成します。 |
|
LightSwitch では、フィールドをエンティティの主キーとして使用する場合は、KeyAttribute 属性を使用します。 複数のキーを指定できます。 |
|
この属性を使用して、フィールドの最大値と最小値を設定します。 この属性は数値以外のデータ型に影響しません。 |
|
LightSwitch では、このプロパティは文字列型を持つフィールドにのみ影響します。 この属性の AllowEmptyStrings プロパティを False に設定する場合、LightSwitch では、フィールドの [必須] プロパティは True に設定されます。 |
|
LightSwitch では、Scaffold プロパティを True に設定すると、[Display By Default] プロパティは True に設定されます。 |
|
LightSwitch で、MaximumLength プロパティを使用して、フィールドの [最大長] プロパティを設定します。 |
|
LightSwitch では、この属性を適用すると、このフィールドの [既定で表示] プロパティは False に設定されます。 |
次の属性は LightSwitch に影響しません。
ConcurrencyCheck
DataType
DisplayColumn
DisplayFormat
FilterUIHint
MetadataType
RegularExpression
ScaffoldTable
UIHintAttribute