共用方式為


在程式碼中使用與資料相關的物件

LightSwitch 會產生描述你的資料的物件和成員。這些物件及成員的名稱與您解決方案中的項目名稱相符。例如,如果您加入名為 Customer 的資料表,LightSwitch 就會產生名為 Customer 的物件。本主題說明 LightSwitch 所產生的每個物件類型。若要檢視使用這些物件和成員執行常見資料相關工作的程式碼範例,請參閱使用程式碼執行與資料相關的工作

產生的物件及成員的階層架構

下圖摘要產生的資料模型物件與成員。

產生的物件階層架構

應用程式

Application 物件會提供應用程式中物件的最高等級存取權。若要存取 Application 物件,請在程式碼編輯器中開啟任何使用者程式碼檔案,然後輸入 Application。輸入 Application 並輸入 "." 之後,IntelliSense 中顯示的方法及屬性類型將會根據您撰寫程式碼的程式碼檔案變更。在大多數情況下,您可以使用 Application 物件的屬性取得表示目前使用者的物件。

資料工作區

DataWorkspace 物件是所有資料存取的最上層物件。DataWorkspace 物件包含專案中每個資料來源的屬性。例如,如果您有名為 NorthwindData 的資料來源,LightSwitch 就會產生名為 NorthwinddData 的屬性。當您在 [程式碼編輯器] 中輸入 DataWorkspace 時,下拉式清單中的 NorthwindData 屬性會啟用。

下圖顯示可能會在下拉式清單中出現的一些產生的成員。

DataWorkspace 物件的資料來源屬性

Data Source

LightSwitch 會為專案中的每個資料來源產生物件。這個物件包含可以用來存取資料的成員。資料來源物件的成員包括實體集屬性和查詢方法。

下圖顯示可能會在下拉式清單中出現的一些產生的成員。

資料來源物件的成員

Gg445195.collapse_all(zh-tw,VS.110).gif實體集屬性

實體集屬性會傳回實體的集合。LightSwitch 會為資料來源中的每個實體產生實體集屬性。例如,如果您的資料來源包含名為Customer的實體, LightSwitch就會產生名為Customers的屬性。您可以使用Customers屬性取得表示Customer實體集合的EntitySet物件。

EntitySet 物件還包含可讓您檢查目前使用者是否有使用權限在集合中讀取、更新或刪除實體的成員。如需詳細資訊,請參閱使用程式碼執行與資料相關的工作

注意事項注意事項

EntitySet是幾種實體集合物件的類型之一若要最佳化程式碼的效能,請確定您要撰寫的商務邏輯類型使用了正確的實體集合物件類型。如需詳細資訊,請參閱實體集合物件和效能。

Gg445195.collapse_all(zh-tw,VS.110).gif查詢方法

查詢方法會取得查詢的結果。LightSwitch 會您資料來源中定義的每個查詢產生方法。方法的名稱會與查詢的名稱相符。查詢可以傳回單一實體或型別為 IDataServiceQueryable 的實體集合。

注意事項注意事項

IDataServiceQueryable<T>是許多實體集合物件類型中的一個類型。若要最佳化程式碼的效能,請確定您要撰寫的商務邏輯類型使用了正確的實體集合物件類型。如需詳細資訊,請參閱實體集合物件和效能。

LightSwitch 預設會為資料來源中的每個實體產生下列查詢方法。

  1. <實體名稱>_Single。

  2. <實體名稱>_SingleOrDefault。

這兩個方法接受主索引鍵部分,並傳回單一實體物件。如果沒有傳回任何實體,<實體名稱>_Single 方法就會擲回例外狀況,而 <實體名稱>_SingleOrDefault 會方法傳回 Null 值 (在 Visual Basic 中為 Nothing)。

實體

LightSwitch 會為實體集合中的每個實體產生 EntityObject。例如,如果您的程式碼已取回一連串的訂單,這些訂單會包含表示每筆訂單的EntityObjectEntityObject 包含可用於刪除實體、讀取或更新實體屬性值或取得相關實體的成員。您可以從實體集合物件 (例如 EntitySet) 或透過呼叫傳回實體的查詢方法,取得 EntityObject。如需詳細資訊,請參閱使用程式碼執行與資料相關的工作

下圖顯示名為 myOrder 的 Order 實體成員。Order實體包含如OrderDate, OrderID,以及Freight等實體屬性。Order 實體也有一些成員,可用來取得相關的 Order_Details 集合和下訂單的 Customer。

實體物件的屬性

在這個範例中,Customer 屬性會傳回 Customer 實體。Customer 實體位在 Customer-Order 關聯性的一端。

Order_Details 屬性會傳回 Order_Details 的集合。Order_Details 實體位在 Order-Order_Details 關聯性的多端。Order_Details集合物件屬於EntityCollection型別。

此圖也顯示一個名為 Order_DetailsQuery的屬性。以 Query 一字結尾的屬性會傳回 IDataServiceQueryable 物件。

注意事項注意事項

EntityCollectionIDataServiceQueryable 的型別都是實體集合物件。若要最佳化程式碼的效能,請確定您要撰寫的商務邏輯類型使用了正確的實體集合物件類型。如需詳細資訊,請參閱實體集合物件和效能。

實體集合物件和效能

當您使用 LINQ 運算式中的實體集合物件時,LightSwitch 將會執行從伺服器層擷取實體的作業。您所使用的物件類型會決定 LightSwitch 擷取集合中的所有實體還是僅擷取其中的子集。確保程式碼會如預期方式執行,請為您要撰寫的商務邏輯選取最適當的集合物件類型。有兩種類型的實體集合物件: 使LightSwitch從遠端評估 LINQ 運算式的物件,以及使LightSwitch在本機評估 LINQ 運算式的物件。

Gg445195.collapse_all(zh-tw,VS.110).gifLINQ 作業:遠端 VS . 本機執行

如果在 LINQ 運算式中使用EntitySetIDataServiceQueryable物件, LightSwitch會將整個 LINQ 運算式傳遞至伺服器層的資料服務。然後運算式的結果會傳遞回到呼叫程式碼。這種查詢執行類型的執行效能良好,因為只有符合查詢的實體才會傳回給呼叫程式碼。但是資料服務僅支援查詢運算子的子集。如果您的運算式需要其他 LINQ 運算子,請考慮使用其他類型的集合物件。

下圖顯示LINQ 運算式使用IDataServiceQueryable物件。此範例示範 LINQ 作業將整個運算式傳遞給資料服務,並僅傳回符合查詢條件的 Order 實體。

遠端執行查詢運算式

如果您在 LINQ 運算式中使用EntityCollectionIEnumerable物件,則 LightSwitch不會將運算式傳遞至資料服務。相反地, LightSwitch會擷取指定型別的所有實體。然後運算式會在本機套用至整個集合。如果實體集合很龐大,這種類型的查詢執行可能對效能造成不良影響。但是您的程式碼可以使用完整的一組 LINQ 運算子。此外,當您想要將完整集合實體傳遞至程式碼中的其他方法,這種方法可能會有用。

下圖顯示LINQ 運算式使用EntityCollection物件。此範例示範 LINQ 作業擷取特定客戶的所有 Order 實體。然後查詢的條件會在本機套用至整個集合。

本機執行查詢運算式

Gg445195.collapse_all(zh-tw,VS.110).gif範例:取得程式碼中的實體集合物件

下列示範如何取得Northwind 資料庫範例中的Order實體集合。

若要取得此實體集合物件

使用此程式碼

遠端或本機執行

EntitySet

DataWorkspace.Northwind.Orders

myOrder.Details.EntitySet()

Remote

IDataServiceQueryable

myCustomer.OrdersQuery

DataWorkspace.Northwind.Orders.GetQuery()

Remote

EntityCollection

myCustomer.Orders

Local

IEnumerable

myCustomer.OrdersQuery.Execute()

DataWorkspace.Northwind.Orders.GetQuery().Execute()

Remote

請參閱

概念

使用程式碼執行與資料相關的工作

在 LightSwitch 中撰寫程式碼

其他資源

資料:應用程式背後的資訊