適用於 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 檔案中。 如需詳細資訊,請參閱HOW TO:連接至資料。
為了協助開發人員提供正確的連接字串,您可以提供描述該字串所需格式的有用文字。 這段文字會顯示在 [附加資料來源精靈] 的 [連接字串] 方塊中。 若要提供此文字,請將 DescriptionAttribute 屬性加入至網域服務類別的頂端。
擷取連接字串
在 WCF RIA 服務的網域服務類別中,您的程式碼可以參考網域服務類別 (例如 CustomerNamespace.CustomerService) 的完整名稱,從 web.config 檔案擷取連接字串。 下列範例會覆寫網域服務類別的 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 並將連接字串回傳至實體 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 屬性套用至方法。 將 QueryAttribute 的 IsDefault 屬性設定為 True。 此方法必須傳回實體類型的 IEnumerable<T> 或 IQueryable<T>。 方法傳回的集合必須包含實體的所有欄位。 查詢必須接受任何參數。 下列範例會將 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;
}
建立其他查詢方法
您可以視需要建立許多查詢方法。 每個查詢方法都可以根據您加入至方法的自訂邏輯傳回一個或多個實體。 在 LightSwitch 中,您可以在商務邏輯中執行這些方法,也可以在畫面上用來顯示資料。 查詢方法必須傳回實體類型或是實體類型的 IEnumerable<T> 或 IQueryable<T>。 方法參數必須是 LightSwitch 所支援可為 Null 的簡單類型。 如需可為 Null 的型別的詳細資訊,請參閱可為 Null 的實值型別 (Visual Basic) 或 可為 Null 的型別 (C# 程式設計手冊)。 如需 LightSwitch 所支援之簡單類型的詳細資訊,請參閱 HOW TO:定義資料欄位。
將屬性套用至實體欄位
您可以在網域服務類別中,將屬性套用至實體的欄位。 下表提供有關如何使用屬性達成您在 LightSwitch 中所需效果的指引。
屬性 |
在 LightSwitch 中使用此屬性 |
---|---|
在一對多的關聯性中,將 ThisKey 屬性設定為存在於關聯性一端之實體的主索引鍵。 在零或一對多的關聯性中,將 ThisKey 屬性設定為存在於關聯性一端之實體的主索引鍵。 在一對零或一的關聯性中,將 ThisKey 屬性設定為存在於關聯性一端之實體的主索引鍵。 將 OtherKey 屬性設定為存在於關聯性零對一端之實體的主索引鍵。 |
|
在 LightSwitch 中,使用 ShortName 或 Name 屬性來指定要顯示該欄位的名稱。 使用 Description 屬性,以指定您希望在使用者指向包含畫面中欄位的控制項時顯示為工具提示的文字。 |
|
在 LightSwitch 中,如果您將 AllowEdit 屬性設定為 False,則欄位的 [ReadOnly] 屬性會設定為 True。 |
|
如果您將 EnumType 屬性設定為列舉,則 LightSwitch 會使用列舉中的值建立欄位的選取清單。 |
|
如果您想要在 LightSwitch 中使用欄位做為實體的主索引鍵,請使用 KeyAttribute 屬性。 您可以指定多個索引鍵。 |
|
使用此屬性來設定欄位的最大和最小值。 此屬性對非數值資料型別沒有影響。 |
|
在 LightSwitch 中,此屬性僅影響具有字串型別的欄位。 如果您將此屬性 (Attribute) 的 AllowEmptyStrings 屬性 (Property) 設定為 False,則 LightSwitch 會將欄位的 [是必要項] 屬性 (Property) 設定為 True。 |
|
在 LightSwitch 中,如果您將 Scaffold 屬性設定為 True,則 [預設顯示] 屬性會設定為 True。 |
|
在 LightSwitch 中,使用 MaximumLength 屬性以設定欄位的最大長度屬性。 |
|
如果您在 LightSwitch 中套用此屬性,欄位的 預設顯示屬性就會設定為 False。 |
下列屬性在 LightSwitch 中沒有效果:
ConcurrencyCheck
DataType
DisplayColumn
DisplayFormat
FilterUIHint
MetadataType
RegularExpression
ScaffoldTable
UIHintAttribute