在程式碼中使用與資料相關的物件
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 |