QueryView 項目 (EntitySetMapping)
在 實體資料模型 (EDM) 中,EntitySetMapping 的 QueryView 項目定義概念模型中的實體與儲存體模型中的實體之間的唯讀對應。您可以利用對儲存體模型評估的 實體 SQL 查詢來定義這個查詢檢視,並藉由概念模型中的實體來表示結果集。因為查詢檢視是唯讀的,無法使用標準更新命令來更新查詢檢視所定義的類型。您可以使用修改函式來更新這些類型。如需詳細資訊,請參閱 HOW TO:把修改函式對應至預存程序。
您可以定義查詢檢視來啟用下列案例:
定義概念模型中的實體,其中未包含儲存體模型中實體的所有屬性。這包括沒有預設值以及不支援 null 值的屬性。
將儲存體模型中的計算資料行對應至概念模型中實體類型的屬性。
定義分割概念模型實體所用之條件不是以實體為依據的對應。當您使用 Condition 項目指定條件式對應時,提供的條件必須等於指定的值。如需詳細資訊,請參閱 Condition 項目 (MappingFragment)。
將儲存體模型中的相同資料行對應至概念模型中的多種類型。
將多種類型對應至相同資料表。
定義概念模型中不是以關聯式結構描述之外部索引鍵為依據的關聯。
使用自訂商務邏輯來設定概念模型中的屬性值。例如,您可以將資料來源中的字串值 "T" 對應至概念模型中的 true 值 (布林值)。
為查詢結果定義條件篩選器。
對概念模型資料強加的限制比儲存體模型的少。例如,即使概念模型屬性對應的資料行不支援 null 值,您還是可以使該屬性變成可為 null。
下列考量適用於為實體定義查詢檢視的情況:
查詢檢視是唯讀的。您只能使用修改函式來更新這些實體。
當您依據查詢檢視定義實體類型時,也必須依據查詢檢視定義所有的相關實體。
當您將多對多關聯對應至儲存體模型 (代表關聯式結構描述中的連結資料表) 中的實體時,必須在這個連結資料表的 AssociationSetMapping 項目中定義 QueryView 項目。如需詳細資訊,請參閱 QueryView 項目 (AssociationSetMapping)。
必須為類型階層架構中的所有類型定義查詢檢視。您可以用下列方式進行這項工作:
利用單一 QueryView 項目,會指定單一 實體 SQL 查詢傳回階層架構中所有實體類型的聯集。
利用單一 QueryView 項目,會指定單一 實體 SQL 查詢根據特定條件使用 CASE 運算子傳回階層架構中的特定實體類型。
利用階層架構中特定類型的其他 QueryView 項目。在這個案例中,請使用 QueryView 項目的 TypeName 屬性來指定每個檢視的實體類型。
定義查詢檢視時,無法對 EntitySetMapping 項目指定 StorageSetName 屬性。
定義查詢檢視時,EntitySetMapping 項目也不能同時包含 Property 對應。
下列範例會為 AdventureWorks Sales Model 中的 Product 實體類型定義查詢檢視。
<EntitySetMapping Name="Product">
<QueryView>
SELECT VALUE AdventureWorksModel.Product(P.ProductID,
P.Name, P.ProductNumber, P.Color, P.ListPrice, P.Size, P.Weight,
P.Style)
FROM Person.Product as P
</QueryView>
</EntitySetMapping>
因為查詢只會傳回儲存體模型中 Product 類型的成員子集,所以已經依據這個對應修改了 AdventureWorks Sales Model 中的 Product 類型,如下所示:
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductID" />
</Key>
<Property Name="ProductID" Type="Int32" Nullable="false" />
<Property Name="Name" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="ProductNumber" Type="String" Nullable="false" MaxLength="25" Unicode="true" FixedLength="false" />
<Property Name="Color" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
<Property Name="ListPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
<Property Name="Size" Type="String" MaxLength="5" Unicode="true" FixedLength="false" />
<Property Name="Weight" Type="Decimal" Precision="8" Scale="2" />
<Property Name="Style" Type="String" MaxLength="2" Unicode="true" FixedLength="true" />
</EntityType>
這個範例並不會修改 AdventureWorks Sales Model 範例的儲存體模型中的 Product 類型。