共用方式為


QueryView 項目 (EntitySetMapping)

在 實體資料模型 (EDM) 中,EntitySetMappingQueryView 項目定義概念模型中的實體與儲存體模型中的實體之間的唯讀對應。您可以利用對儲存體模型評估的 實體 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 類型。

另請參閱

概念

Entity Data Model 對應案例 (應用程式案例)
EntitySetMapping 項目 (MSL)