在程式碼中使用與資料相關的物件
LightSwitch 會產生描述你的資料的物件和成員。這些物件及成員的名稱與您解決方案中的項目名稱相符。例如,如果您加入名為 Customer 的資料表,LightSwitch 就會產生名為 Customer 的物件。本主題說明 LightSwitch 所產生的每個物件類型。若要檢視使用這些物件和成員執行常見資料相關工作的程式碼範例,請參閱使用程式碼執行與資料相關的工作。
產生的物件及成員的階層架構
下圖摘要產生的資料模型物件與成員。
應用程式
Application 物件會提供應用程式中物件的最高等級存取權。若要存取 Application 物件,請在程式碼編輯器中開啟任何使用者程式碼檔案,然後輸入 Application。輸入 Application 並輸入 "." 之後,IntelliSense 中顯示的方法及屬性類型將會根據您撰寫程式碼的程式碼檔案變更。在大多數情況下,您可以使用 Application 物件的屬性取得表示目前使用者的物件。
資料工作區
DataWorkspace 物件是所有資料存取的最上層物件。DataWorkspace 物件包含專案中每個資料來源的屬性。例如,如果您有名為 NorthwindData 的資料來源,LightSwitch 就會產生名為 NorthwinddData 的屬性。當您在 [程式碼編輯器] 中輸入 DataWorkspace 時,下拉式清單中的 NorthwindData 屬性會啟用。
下圖顯示可能會在下拉式清單中出現的一些產生的成員。
Data Source
LightSwitch 會為專案中的每個資料來源產生物件。這個物件包含可以用來存取資料的成員。資料來源物件的成員包括實體集屬性和查詢方法。
下圖顯示可能會在下拉式清單中出現的一些產生的成員。
實體集屬性
實體集屬性會傳回實體的集合。LightSwitch 會為資料來源中的每個實體產生實體集屬性。例如,如果您的資料來源包含名為Customer的實體, LightSwitch就會產生名為Customers的屬性。您可以使用Customers屬性取得表示Customer實體集合的EntitySet物件。
EntitySet 物件還包含可讓您檢查目前使用者是否有使用權限在集合中讀取、更新或刪除實體的成員。如需詳細資訊,請參閱使用程式碼執行與資料相關的工作。
注意事項 |
---|
EntitySet是幾種實體集合物件的類型之一若要最佳化程式碼的效能,請確定您要撰寫的商務邏輯類型使用了正確的實體集合物件類型。如需詳細資訊,請參閱實體集合物件和效能。 |
查詢方法
查詢方法會取得查詢的結果。LightSwitch 會您資料來源中定義的每個查詢產生方法。方法的名稱會與查詢的名稱相符。查詢可以傳回單一實體或型別為 IDataServiceQueryable 的實體集合。
注意事項 |
---|
IDataServiceQueryable<T>是許多實體集合物件類型中的一個類型。若要最佳化程式碼的效能,請確定您要撰寫的商務邏輯類型使用了正確的實體集合物件類型。如需詳細資訊,請參閱實體集合物件和效能。 |
LightSwitch 預設會為資料來源中的每個實體產生下列查詢方法。
<實體名稱>_Single。
<實體名稱>_SingleOrDefault。
這兩個方法接受主索引鍵部分,並傳回單一實體物件。如果沒有傳回任何實體,<實體名稱>_Single 方法就會擲回例外狀況,而 <實體名稱>_SingleOrDefault 會方法傳回 Null 值 (在 Visual Basic 中為 Nothing)。
實體
LightSwitch 會為實體集合中的每個實體產生 EntityObject。例如,如果您的程式碼已取回一連串的訂單,這些訂單會包含表示每筆訂單的EntityObject 。EntityObject 包含可用於刪除實體、讀取或更新實體屬性值或取得相關實體的成員。您可以從實體集合物件 (例如 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 物件。
注意事項 |
---|
EntityCollection 和 IDataServiceQueryable 的型別都是實體集合物件。若要最佳化程式碼的效能,請確定您要撰寫的商務邏輯類型使用了正確的實體集合物件類型。如需詳細資訊,請參閱實體集合物件和效能。 |
實體集合物件和效能
當您使用 LINQ 運算式中的實體集合物件時,LightSwitch 將會執行從伺服器層擷取實體的作業。您所使用的物件類型會決定 LightSwitch 擷取集合中的所有實體還是僅擷取其中的子集。確保程式碼會如預期方式執行,請為您要撰寫的商務邏輯選取最適當的集合物件類型。有兩種類型的實體集合物件: 使LightSwitch從遠端評估 LINQ 運算式的物件,以及使LightSwitch在本機評估 LINQ 運算式的物件。
LINQ 作業:遠端 VS . 本機執行
如果在 LINQ 運算式中使用EntitySet或IDataServiceQueryable物件, LightSwitch會將整個 LINQ 運算式傳遞至伺服器層的資料服務。然後運算式的結果會傳遞回到呼叫程式碼。這種查詢執行類型的執行效能良好,因為只有符合查詢的實體才會傳回給呼叫程式碼。但是資料服務僅支援查詢運算子的子集。如果您的運算式需要其他 LINQ 運算子,請考慮使用其他類型的集合物件。
下圖顯示LINQ 運算式使用IDataServiceQueryable物件。此範例示範 LINQ 作業將整個運算式傳遞給資料服務,並僅傳回符合查詢條件的 Order 實體。
如果您在 LINQ 運算式中使用EntityCollection或IEnumerable物件,則 LightSwitch不會將運算式傳遞至資料服務。相反地, LightSwitch會擷取指定型別的所有實體。然後運算式會在本機套用至整個集合。如果實體集合很龐大,這種類型的查詢執行可能對效能造成不良影響。但是您的程式碼可以使用完整的一組 LINQ 運算子。此外,當您想要將完整集合實體傳遞至程式碼中的其他方法,這種方法可能會有用。
下圖顯示LINQ 運算式使用EntityCollection物件。此範例示範 LINQ 作業擷取特定客戶的所有 Order 實體。然後查詢的條件會在本機套用至整個集合。
範例:取得程式碼中的實體集合物件
下列示範如何取得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 |