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

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

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

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

產生的物件階層架構

Application 物件可存取應用程式中最上層的物件。 若要存取 Application 物件,請在程式碼編輯器中開啟任何使用者程式碼檔案,然後輸入 Application。 輸入 Application 再輸入 “.” 之後,IntelliSense 中顯示的方法和屬性類型會隨您撰寫程式碼的程式碼檔案而有所不同。 在大多數情況下,您可以使用 Application 物件的屬性取得代表目前使用者的物件。

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

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

DataWorkspace 物件的資料來源屬性

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

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

資料來源物件的成員

實體集屬性

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

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

System_CAPS_ICON_note.jpg 注意

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

查詢方法

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

System_CAPS_ICON_note.jpg 注意

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

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

  1. <實體名稱>_Single。

  2. <實體名稱>_SingleOrDefault。

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

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

下圖顯示名為 myOrderOrder 實體成員。 Order 實體包含 OrderDateOrderIDFreight 等實體屬性。 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 物件。

System_CAPS_ICON_note.jpg 注意

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

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

LINQ 作業:遠端與本機執行的比較

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

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

遠端執行查詢運算式

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

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

本機執行查詢運算式

範例:取得程式碼中的實體集合物件

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

取得此實體集合物件使用此程式碼遠端或本機執行
EntitySetDataWorkspace.Northwind.Orders



 myOrder.Details.EntitySet()
遠端
IDataServiceQueryablemyCustomer.OrdersQuery



 DataWorkspace.Northwind.Orders.GetQuery()
遠端
EntityCollectionmyCustomer.OrdersLocal
IEnumerablemyCustomer.OrdersQuery.Execute()



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

資料:應用程式背後的資訊
使用程式碼執行與資料相關的工作

顯示: