CSDL 規格

概念結構定義語言 (CSDL) 是 XML架構語言,可描述組成資料驅動應用程式之概念模型的實體、關聯性和函式。 Entity Framework 或 WCF 資料服務可以使用這個概念模型。 Entity Framework 會使用以 CSDL 描述的中繼資料,將概念模型中定義的實體和關聯性對應至資料來源。 如需詳細資訊,請參閱 SSDL 規格 MSL 規格

CSDL 是 Entity Framework 的實體資料模型實作。

在 Entity Framework 應用程式中,概念模型中繼資料會從 .csdl 檔案(以 CSDL 撰寫)載入 System.Data.Metadata.Edm.EdmItemCollection 的實例,而且可以使用 System.Data.Metadata.Edm.MetadataWorkspace 類別中的方法存取。 Entity Framework 會使用概念模型中繼資料,將針對概念模型查詢轉譯為數據源特定的命令。

EF Designer 會在設計階段將概念模型資訊儲存在 .edmx 檔案中。 在建置階段,EF Designer 會使用 .edmx 檔案中的資訊,在執行時間建立 Entity Framework 所需的 .csdl 檔案。

CSDL 的版本可藉由 XML 命名空間來區別。

CSDL 版本 XML 命名空間
CSDL v1 https://schemas.microsoft.com/ado/2006/04/edm
CSDL v2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3 https://schemas.microsoft.com/ado/2009/11/edm

 

Association 項目 (CSDL)

Association 元素會定義兩個實體類型之間的關聯性。 關聯 (Association) 必須指定關聯性 (relationship) 中的相關實體類型,以及關聯性每一端可能的實體類型數量 (也就是「多重性」)。 關聯端的乘數可以有一個值(1)、零或一個 (0..1),或多個 。。 這項資訊是在兩個子 End 元素中指定。

關聯其中一端的實體類型執行個體可透過導覽屬性或外部索引鍵來存取 (若在實體類型上公開)。

在應用程式中,關聯的執行個體代表實體類型之間的特定關聯。 關聯執行個體會在邏輯上群組於關聯集中。

Association 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 結束 (正好 2 個元素)
  • ReferentialConstraint (零或一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 Association 元素的屬性。

屬性名稱 是必要的
名稱 Yes 關聯的名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Association 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 當客戶 訂單 實體類型上未公開外鍵時, 定義 CustomerOrders 關聯的 Association 元素。 關聯之每個 End 的多重性 值表示許多 訂單 可以與 客戶 相關聯,但只有一個 客戶 可以與 訂單 相關聯。 此外,OnDelete 元素表示 如果客戶已刪除,所有與特定 客戶 相關的訂單 ,且已載入 ObjectCoNtext,將會刪除

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

下列範例顯示 當 Customer 和 Order 實體類型上公開外鍵時, 定義 CustomerOrders 關聯的 Association 元素。 公開外鍵時,實體之間的關聯性會使用 ReferentialConstraint 元素來管理。 相對應的 AssociationSetMapping 專案不需要將此關聯對應至資料來源。

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
   <ReferentialConstraint>
        <Principal Role="Customer">
            <PropertyRef Name="Id" />
        </Principal>
        <Dependent Role="Order">
             <PropertyRef Name="CustomerId" />
         </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

AssociationSet 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 AssociationSet 元素是相同類型的關聯實例邏輯容器。 關聯集提供群組關聯執行個體的定義,執行個體才能對應至資料來源。  

AssociationSet 元素可以有下列子項目(依列出的順序):

  • 檔 (允許零個或一個元素)
  • 結束 (剛好需要兩個元素)
  • 注釋專案(允許零個或多個專案)

Association 屬性會指定關聯集包含的關聯類型。 組成關聯集結尾的實體集,會以完全相同的兩個子 End 元素來指定。

適用屬性

下表描述可套用至 AssociationSet 元素的屬性。

屬性名稱 是必要的
名稱 Yes 實體集的名稱。 Name 屬性的值 不能與 Association 屬性的值 相同。
協會 Yes 關聯執行個體 (由關聯集包含) 之關聯的完整名稱。 關聯必須存在與關聯集相同的命名空間中。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 AssociationSet 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有兩個 AssociationSet 元素的 EntityContainer 元素:

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

CollectionType 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 CollectionType 元素會指定函式參數或函式傳回型別是集合。 CollectionType 元素可以是 Parameter 元素或 ReturnType (Function) 元素的子系。 您可以使用 Type 屬性或下列其中一個子項目來指定 集合類型:

  • CollectionType
  • ReferenceType
  • RowType
  • TypeRef

注意

模型不會使用 Type 屬性和子專案來驗證集合的類型是否指定

 

適用屬性

下表描述可套用至 CollectionType 元素的屬性。 請注意,DefaultValue、MaxLength、 FixedLength Precision Scale Unicode Collation 屬性僅適用于 EDMSimpleTypes 的 集合。

屬性名稱 是必要的
類型 No 集合的型別。
可為 Null No True (預設值)或 False ,視屬性是否可以有 Null 值而定。
[!注意]
> 在 CSDL v1 中,複雜型別屬性必須有 Nullable="False"
DefaultValue No 屬性的預設值。
MaxLength No 屬性值的最大長度。
FixedLength No True False ,視屬性值是否儲存為固定長度字串而定。
有效位數 No 屬性值的有效位數。
縮放比例 No 屬性值的小數位數。
SRID No 空間系統參考識別碼。 僅適用于空間類型的屬性。   如需詳細資訊,請參閱 SRID SRID (SQL Server)
Unicode No True False ,視屬性值是否儲存為 Unicode 字串而定。
定序 No 指定資料來源中使用之定序順序的字串。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 CollectionType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示模型定義的函式,該函式會使用 CollectionType 元素來指定函式會傳回 Person 實體類型的集合 (如 ElementType 屬性所指定)。

 <Function Name="LastNamesAfter">
        <Parameter Name="someString" Type="Edm.String"/>
        <ReturnType>
             <CollectionType  ElementType="SchoolModel.Person"/>
        </ReturnType>
        <DefiningExpression>
             SELECT VALUE p
             FROM SchoolEntities.People AS p
             WHERE p.LastName >= someString
        </DefiningExpression>
 </Function>

 

下列範例顯示模型定義的函式,該函式會使用 CollectionType 元素來指定函式會傳回資料列集合(如 RowType 元素中所 指定)。

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

下列範例顯示模型定義的函式,該函式會使用 CollectionType 元素來指定函式接受作為 Department 實體類型集合的參數

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

ComplexType 項目 (CSDL)

ComplexType 元素會定義由 EdmSimpleType 屬性或其他複雜類型所組成的 資料結構。  複雜類型可以是實體類型或另一個複雜類型的屬性。 複雜類型與實體類型相似之處在於複雜類型會定義資料。 不過,複雜型別和實體類型之間還是有些重大的差異:

  • 複雜型別不具有識別 (或索引鍵),因此無法獨立存在。 複雜型別只能以實體類型或其他複雜型別的屬性形式存在。
  • 複雜類型無法參與關聯。 關聯兩端都不能是複雜類型,因此無法為複雜類型定義導覽屬性。
  • 雖然複雜型別的純量屬性可能每個都設為 null,但複雜型別屬性不可以有 null 值。

ComplexType 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 屬性 (零個或多個元素)
  • 注釋專案 (零個或多個元素)

下表描述可套用至 ComplexType 元素的屬性。

屬性名稱 是必要的
名稱 Yes 複雜類型的名稱。 複雜類型的名稱不可與其他複雜類型、實體類型或模型範圍內之關聯的名稱相同。
BaseType No 其他複雜類型的名稱是即將定義之複雜類型的基底型別。
[!注意]
> 這個屬性不適用於 CSDL v1。 該版本不支援複雜類型的繼承。
摘要 No True False (預設值)取決於複雜類型是否為抽象類別型。
[!注意]
> 這個屬性不適用於 CSDL v1。 該版本的複雜類型不可以是抽象型別。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 ComplexType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示複雜類型 Address,其中包含 EdmSimpleType 屬性 StreetAddress City StateOrProvince Country PostalCode

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

若要將複雜類型 Address (above) 定義為實體類型的屬性,您必須在實體類型定義中宣告屬性類型。 下列範例會將 Address 屬性顯示為 實體類型上的複雜類型( Publisher ):

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
       <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                           FromRole="Publisher" ToRole="Book" />
     </EntityType>

 

 

DefiningExpression 項目 (CSDL)

概念結構定義語言中的 DefiningExpression 元素包含 Entity SQL 運算式,定義概念模型中的函式。  

注意

為了驗證目的, DefiningExpression 元素可以包含任意內容。 不過,如果 DefiningExpression 元素不包含有效的 Entity SQL,Entity Framework 會在執行時間擲回例外狀況。

 

適用屬性

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 DefiningExpression 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

範例

下列範例會使用 DefiningExpression 元素來定義函式,以傳回書籍發行後的年數。 DefiningExpression 元素的內容 是以 Entity SQL 撰寫。

 <Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
       <Parameter Name="book" Type="BooksModel.Book" />
       <DefiningExpression>
         Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
       </DefiningExpression>
     </Function>

 

 

Dependent 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 Dependent 元素是 ReferentialConstraint 元素的子專案,並定義引用條件約束的相依結尾。 ReferentialConstraint 元素會定義類似于關係資料庫中參考完整性條件約束的功能。 同樣地,資料庫資料表的資料行 (或多個資料行) 可以參考其他資料表的主索引鍵,實體類型的屬性 (或多個屬性) 可以參考其他實體類型的實體索引鍵。 參考的實體類型稱為 條件約束的主體結尾 。 參考主體端的實體類型稱為 條件約束的相依端 PropertyRef 元素可用來指定哪些索引鍵參考主體結尾。

Dependent 元素可以有下列子項目(依所列的順序):

  • PropertyRef (一或多個元素)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 Dependent 元素的屬性。

屬性名稱 是必要的
角色 Yes 位於關聯之相依端點的實體類型名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Dependent 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示作為 PublishedBy 關聯定義的 部分使用的 ReferentialConstraint 元素。 Book 實體類型的 PublisherId 屬性 構成引用條件約束的相依結尾。

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Documentation 項目 (CSDL)

概念結構定義語言中的 Documentation 元素可用來提供父元素中定義之物件的相關資訊。 在 .edmx 檔案中 ,當 Documentation 元素是 EF Designer 設計介面上顯示為物件之專案的子系時,[檔 ] 元素的內容 會出現在物件的 Visual Studio [屬性 ] 視窗中。

Documentation 元素可以有下列子項目(依所列順序):

  • 摘要 :父元素的簡短描述。 (零或一個項目)
  • LongDescription :父元素的廣泛描述。 (零或一個項目)
  • 注釋專案。 (零或多個項目)

適用屬性

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Documentation 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

範例

下列範例顯示 Documentation 元素做為 EntityType 元素的子專案。 如果下列程式碼片段位於 .edmx 檔案的 CSDL 內容中,當您按一下 Customer 實體類型時,[摘要 ] 和 [LongDescription ] 元素的內容 會出現在 [Visual Studio 屬性 ] 視窗中。

 <EntityType Name="Customer">
    <Documentation>
      <Summary>Summary here.</Summary>
      <LongDescription>Long description here.</LongDescription>
    </Documentation>
    <Key>
      <PropertyRef Name="CustomerId" />
    </Key>
    <Property Type="Int32" Name="CustomerId" Nullable="false" />
    <Property Type="String" Name="Name" Nullable="false" />
 </EntityType>

 

 

End 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 End 元素可以是 Association 元素或 AssociationSet 專案的子系。 在每個案例中 ,End 元素的角色都不同,且適用的屬性不同。

End 項目為 Association 項目的子項目

End 元素(做為 Association 元素的 子系)會識別關聯一端的實體類型,以及存在於該關聯端的實體類型實例數目。 關聯 End 會定義為關聯的部分。關聯必須具有兩個關聯 End。 關聯其中一端的實體型別執行個體可透過巡覽屬性或外部索引鍵來存取 (若在實體型別上公開)。  

End 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • OnDelete (零或一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述當它是 Association 元素的子系時,可以套用至 End 元素的屬性

屬性名稱 是必要的
類型 Yes 其中一個關聯 End 的實體類型名稱。
角色 No 關聯 End 的名稱。 如果未提供任何名稱,則會使用關聯 End 上之實體類型的名稱。
多重性 Yes 1 0..1 * 取決於可以在關聯結尾的實體類型實例數目。
1 表示關聯端只存在一個實體類型實例。
0..1 表示關聯端存在零或一個實體類型實例。
* 表示關聯端存在零、一或多個實體類型實例。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 End 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 定義 CustomerOrders 關聯的 Association 元素。 關聯之每個 End 的多重性 值表示許多 訂單 可以與 客戶 相關聯,但只有一個 客戶 可以與 訂單 相關聯。 此外,OnDelete 元素表示如果客戶已刪除,則會刪除 所有 與特定 客戶 相關的訂單,且已載入 ObjectCoNtext 的訂單

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
         <OnDelete Action="Cascade" />
   </End>
 </Association>

 

End 項目為 AssociationSet 項目的子項目

End 元素會指定關聯集的一端。 AssociationSet 元素必須包含兩 個 End 元素。 End 元素中包含的 資訊用於將關聯集對應至資料來源。

End 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 注釋專案 (零個或多個元素)

注意

Annotation 項目必須出現在所有其他子項目之後。 注釋元素只能在 CSDL v2 和更新版本中使用。

 

適用屬性

下表描述當它是 AssociationSet 元素的子系時,可以套用至 End 元素的屬性

屬性名稱 是必要的
EntitySet Yes 定義父 AssociationSet 元素一端的 EntitySet 專案名稱 EntitySet 元素必須定義在與父 AssociationSet 元素相同的實體容器中。
角色 No 關聯集 End 的名稱。 如果未使用 Role 屬性,關聯集結尾的名稱將會是實體集的名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 End 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有兩 AssociationSet 元素的 EntityContainer 元素,每個元素都有兩 個 End 元素:

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntityContainer 項目 (CSDL)

概念結構定義語言中的 EntityContainer 元素是實體集、關聯集和函式匯入的邏輯容器。 概念模型實體容器會透過 EntityContainerMapping 元素對應至儲存體模型實體容器。 儲存體模型實體容器描述資料的結構:實體集描述資料表、關聯集描述外部索引建條件約束,而函式匯入則描述資料庫中的預存程序。

EntityContainer 元素可以有零或一個 Documentation 元素。 如果檔 元素存在,它必須位於所有 EntitySet AssociationSet FunctionImport 元素之前。

EntityContainer 元素可以有下列子項目的零或更多專案(依所列順序):

  • EntitySet
  • AssociationSet
  • FunctionImport
  • Annotation 項目

您可以擴充 EntityContainer 元素,以包含相同命名空間內另一個 EntityContainer 的內容。 若要包含另一個 EntityContainer 的內容,請在參考 EntityContainer 元素中,將 Extends 屬性的值 設定為您想要包含的 EntityContainer 元素名稱。 所包含 EntityContainer 元素的所有子項目都會被視為參考 EntityContainer 元素的子項目。

適用屬性

下表描述可套用至 Using 元素的屬性。

屬性名稱 是必要的
名稱 Yes 實體容器的名稱。
延伸 No 相同命名空間中另一個實體容器的名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 EntityContainer 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示定義三個實體集和兩個 關聯集的 EntityContainer 元素。

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntitySet 項目 (CSDL)

概念結構定義語言中的 EntitySet 元素是實體類型和衍生自該實體類型之任何類型的實例的邏輯容器。 實體類型和實體集之間的關聯性,類似於關聯式資料庫中資料列與資料表的關係。 實體類型和資料列一樣可以定義相關的資料集,而實體集則和資料表一樣可以包含該定義的執行個體。 實體集提供群組實體類型執行個體的建構,以便將它們對應至資料來源中的相關資料結構。  

您可以為特定的實體類型定義多個實體集。

注意

EF 設計工具不支援每個類型包含多個實體集的概念模型。

 

EntitySet 元素可以有下列子項目(依所列的順序):

  • 檔元素 (允許零個或一個元素)
  • 注釋專案(允許零個或多個專案)

適用屬性

下表描述可套用至 EntitySet 元素的屬性。

屬性名稱 是必要的
名稱 Yes 實體集的名稱。
EntityType Yes 實體類型 (實體集包含其執行個體) 的完整名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 EntitySet 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有三個 EntitySet 元素的 EntityContainer 元素:

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

您可以定義每個類型的多重實體集 (MEST)。 下列範例會針對 Book 實體類型定義具有兩個實體集的 實體容器:

 <EntityContainer Name="BooksContainer" >
   <EntitySet Name="Books" EntityType="BooksModel.Book" />
   <EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
   <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
   <EntitySet Name="Authors" EntityType="BooksModel.Author" />
   <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
     <End Role="Book" EntitySet="Books" />
     <End Role="Publisher" EntitySet="Publishers" />
   </AssociationSet>
   <AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
     <End Role="Book" EntitySet="Books" />
     <End Role="Author" EntitySet="Authors" />
   </AssociationSet>
 </EntityContainer>

 

 

EntityType 項目 (CSDL)

EntityType 元素代表概念模型中最上層概念的結構,例如客戶或訂單。 實體類型是應用程式中實體類型之執行個體的範本。 每個範本包含下列資訊:

  • 唯一名稱。 (必要項。)
  • 實體索引鍵是由一個或多個屬性定義。 (必要項。)
  • 包含資料的屬性。 (選用。)
  • 導覽屬性允許從關聯的一端巡覽至另一端。 (選用。)

在應用程式中,實體類型的執行個體代表特定的物件 (例如特定的客戶或訂單)。 實體類型的每一個執行個體都必須在實體集中有唯一的實體索引鍵。

如果兩個實體類型執行個體屬於相同類型,而且索引鍵的值也相同,則會將這兩個執行個體視為相等。

EntityType 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 索引鍵 (零或一個專案)
  • 屬性 (零個或多個元素)
  • NavigationProperty (零個或多個元素)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 EntityType 元素的屬性。

屬性名稱 是必要的
名稱 Yes 實體類型的名稱。
BaseType No 其他實體類型的名稱是即將定義之實體類型的基底類型。
摘要 No True False ,視實體類型是否為抽象類別型而定。
OpenType No True False 取決於實體類型是否為開放式實體類型。
[!注意]
>OpenType 屬性僅適用于與 ADO.NET Data Services 搭配使用的概念模型中定義的實體類型。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 EntityType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有三 個 Property 元素和兩 NavigationProperty 元素的 EntityType 元素:

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

EnumType 元素 (CSDL)

EnumType 元素代表列舉型別。

EnumType 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 成員 (零個或多個元素)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 EnumType 元素的屬性。

屬性名稱 是必要的
名稱 Yes 實體類型的名稱。
IsFlags No True False ,視列舉類型是否可以當做一組旗標使用而定。 預設值為 False。
UnderlyingType No Edm.Byte Edm.Int16 Edm.Int32 Edm.Int64 Edm.SByte 定義類型值的範圍。   列舉專案的預設基礎類型為 Edm.Int32。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 EnumType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有三 個 Member 元素的 EnumType 元素:

 <EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
   <Member Name="Red" />
   <Member Name="Green" />
   <Member Name="Blue" />
 </EntityType>

 

 

Function 屬性 (CSDL)

概念結構定義語言中的 Function 元素是用來定義或宣告概念模型中的函式。 函式是使用 DefiningExpression 元素所定義。  

Function 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 參數 (零個或多個元素)
  • DefiningExpression (零或一個專案)
  • ReturnType (Function) (零或一個專案)
  • 注釋專案 (零個或多個元素)

函式的傳回型別必須使用 ReturnType (Function) 元素或 ReturnType 屬性來指定 (請參閱下方),但不能同時指定 這兩者。 可能的傳回型別包括任何 EdmSimpleType、實體類型、複雜類型、資料列型別或 ref 型別 (或這些類型其中之一的集合)。

適用屬性

下表描述可套用至 Function 元素的屬性。

屬性名稱 是必要的
名稱 Yes 函數的名稱。
ReturnType No 此函式傳回的型別。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Function 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例會使用 Function 元素來定義函式,以傳回雇用講師後的年數。

 <Function Name="YearsSince" ReturnType="Edm.Int32">
   <Parameter Name="date" Type="Edm.DateTime" />
   <DefiningExpression>
     Year(CurrentDateTime()) - Year(date)
   </DefiningExpression>
 </Function>

 

 

FunctionImport 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 FunctionImport 元素代表資料來源中定義的函式,但可透過概念模型提供給物件使用。 例如,儲存體模型中的 Function 元素可用來代表資料庫中的預存程式。 概念模型中的 FunctionImport 元素代表 Entity Framework 應用程式中的對應函式,並使用 FunctionImportMapping 元素對應至儲存體模型函式。 在應用程式中呼叫函式時,對應的預存程序會在資料庫中執行。

FunctionImport 元素可以有下列子項目(依所列的順序):

  • 檔 (允許零個或一個元素)
  • 參數 (允許零個或多個元素)
  • 注釋專案(允許零個或多個專案)
  • ReturnType (FunctionImport) (允許零個或多個元素)

函式接受的每個參數都應該定義一個 Parameter 元素。

必須使用 ReturnType (FunctionImport) 元素或 ReturnType 屬性來指定函式的傳回型別(請參閱下方),但不能同時指定 這兩者。 傳回型別值必須是 EdmSimpleType、EntityType 或 ComplexType 的集合。

適用屬性

下表描述可套用至 FunctionImport 元素的屬性。

屬性名稱 是必要的
名稱 Yes 匯入函式的名稱。
ReturnType No 函式傳回的型別。 如果函式不會傳回值,請不要使用這個屬性。 否則,此值必須是 ComplexType、EntityType 或 EDMSimpleType 的集合。
EntitySet No 如果函式傳回實體類型的集合,EntitySet 的值 必須是集合所屬的實體集。 否則, 不得使用 EntitySet 屬性。
IsComposable No 如果值設定為 true,則函式是可組合的(資料表值函式),而且可用於 LINQ 查詢。  預設值為 false

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 FunctionImport 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 可接受一個參數並傳回實體類型的集合的 FunctionImport 元素:

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

 

Key 項目 (CSDL)

Key 元素是 EntityType 元素的子項目,並定義 實體索引鍵 (屬性或一組決定身分識別的實體類型屬性)。 構成實體索引鍵的屬性是在設計階段選取的。 實體索引鍵屬性的值必須在執行階段的實體集中,單獨識別實體類型執行個體。 您應選取構成實體索引鍵的屬性,以保證執行個體在實體集中的唯一性。 Key 元素會藉由參考實體類型的一或多個屬性來定義實體索引鍵。

Key 元素可以有下列子項目:

  • PropertyRef (一或多個元素)
  • 注釋專案 (零個或多個元素)

適用屬性

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Key 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

範例

下列範例會定義名為 Book 的實體類型。 實體索引鍵是藉由參考 實體類型的 ISBN 屬性來定義。

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

ISBN 屬性是實體索引鍵的好選擇,因為國際標準書號 (ISBN ) 可唯一識別書籍。

下列範例顯示實體類型 ( Author ),其實體索引鍵包含兩個屬性: Name Address

 <EntityType Name="Author">
   <Key>
     <PropertyRef Name="Name" />
     <PropertyRef Name="Address" />
   </Key>
   <Property Type="String" Name="Name" Nullable="false" />
   <Property Type="String" Name="Address" Nullable="false" />
   <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                       FromRole="Author" ToRole="Book" />
 </EntityType>

 

使用 實體索引鍵的 [名稱 ] 和 [位址 ] 是合理的選擇,因為同名的兩位作者不太可能位於相同的位址。 不過,針對實體索引鍵所做的這個選擇不能絕對保證實體集中的唯一實體索引鍵。 在此情況下,建議您新增可用來唯一識別作者的屬性,例如 AuthorId

 

Member 元素 (CSDL)

Member 元素是 EnumType 元素的子專案,並定義列舉型別的成員。

適用屬性

下表描述可套用至 FunctionImport 元素的屬性。

屬性名稱 是必要的
名稱 Yes 成員的名稱。
No 成員的值。 根據預設,第一個成員具有值 0,而每個後續列舉值的值會遞增 1。 有多個具有相同值的成員存在。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 FunctionImport 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有三 個 Member 元素的 EnumType 元素:

 <EnumType Name="Color">
   <Member Name="Red" Value=”1”/>
   <Member Name="Green" Value=”3” />
   <Member Name="Blue" Value=”5”/>
 </EntityType>

 

 

NavigationProperty 元素會定義導覽屬性,以提供關聯另一端的參考。 不同于使用 Property 元素定義的屬性,導覽屬性不會定義資料的圖形和特性。 他們提供巡覽兩個實體類型間之關聯的方式。

請注意,在關聯各端點的實體類型上,導覽屬性是選擇性的。 如果您在關聯其中一個端點的實體類型上定義導覽屬性,就不必在關聯另一個端點的實體類型上定義導覽屬性。

導覽屬性傳回的資料類型是由其遠端關聯端點的多重性所判斷。 例如,假設 Customer 實體類型上有 一個導覽屬性 OrdersNavProp ,並巡覽 Customer Order 之間的 一對多關聯。 由於巡覽屬性的遠端關聯端具有多重性 ,因此其資料類型為集合(Order )。 同樣地,如果 Navigation 屬性 CustomerNavProp 存在於 Order 實體類型上 ,則其資料類型會是 Customer ,因為遠端端的多重性是一個 (1)。

NavigationProperty 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 NavigationProperty 元素的屬性。

屬性名稱 是必要的
名稱 Yes 導覽屬性的名稱。
關聯 Yes 關聯的名稱在模型的範圍之內。
ToRole Yes 位於導覽端點的關聯端點。 ToRole 屬性的值 必須與其中一個 關聯結尾上定義的 Role 屬性值相同(定義于 AssociationEnd 元素 中)。
FromRole Yes 開始導覽的關聯端點。 FromRole 屬性的值 必須與在其中一個關聯結尾上定義的其中一個 Role 屬性值相同(定義于 AssociationEnd 元素 中)。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 NavigationProperty 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例會定義具有兩個導覽屬性的實體類型 ( Book) ( PublishedBy WrittenBy ):

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

 

OnDelete 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 OnDelete 元素會定義與關聯連接的行為。 如果 Action 屬性設定為 關聯一端的 Cascade ,當刪除第一端的實體類型時,會刪除關聯另一端的相關實體類型。 如果兩個實體類型之間的關聯是主鍵對主鍵關聯性,則不論 OnDelete 規格為何,當 關聯另一端的主體物件被刪除時,就會刪除載入的相依物件。  

注意

OnDelete 元素只會影響應用程式的執行時間行為;不會影響資料來源中的行為。 資料來源中定義的行為應與應用程式中定義的行為相同。

 

OnDelete 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 OnDelete 元素的屬性。

屬性名稱 是必要的
動作 Yes 串聯 。 如果 Cascade ,則會在刪除主體實體類型時刪除相依實體類型。 如果 為 None ,則刪除主體實體類型時,將不會刪除相依實體類型。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Association 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 定義 CustomerOrders 關聯的 Association 元素。 OnDelete 元素表示 當客戶 刪除時 ,所有與特定 客戶 相關的訂單 ,且已載入 ObjectCoNtext。

 <Association Name="CustomerOrders">
   <End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
         <OnDelete Action="Cascade" />
   </End>
   <End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
 </Association>

 

 

Parameter 項目 (CSDL)

概念結構定義語言中的 Parameter 元素可以是 FunctionImport 元素或 Function 元素的子系。

FunctionImport 項目的應用

Parameter 元素(作為 FunctionImport 元素的 子系)用來定義 CSDL 中宣告之函式匯入的輸入和輸出參數。

Parameter 元素可以有下列子項目(依列出的順序):

  • 檔 (允許零個或一個元素)
  • 注釋專案(允許零個或多個專案)

適用屬性

下表描述可套用至 Parameter 元素的屬性。

屬性名稱 是必要的
名稱 Yes 參數名稱。
類型 Yes 參數型別。 此值必須是 EDMSimpleType 或模型範圍內的複雜類型。
模式 No 根據參數是輸入、 輸出或輸入/輸出參數而定,InOut 或 InOut
MaxLength No 可允許的最大參數長度。
有效位數 No 參數的精確度。
縮放比例 No 參數的小數位數。
SRID No 空間系統參考識別碼。 僅適用于空間類型的參數。 如需詳細資訊,請參閱 SRID SRID (SQL Server)

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Parameter 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有一個 Parameter 子項目的 FunctionImport 元素。 函式接受一個輸入參數,然後傳回實體類型的集合。

 <FunctionImport Name="GetStudentGrades"
                 EntitySet="StudentGrade"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
        <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

 

Function 項目的應用

Parameter 元素(作為 Function 元素的 子系)會定義在概念模型中定義或宣告之函式的參數。

Parameter 元素可以有下列子項目(依列出的順序):

  • 檔 (零或一個專案)
  • CollectionType (零或一個專案)
  • ReferenceType (零或一個專案)
  • RowType (零或一個專案)

注意

只有其中一個 CollectionType、 ReferenceType 或 RowType 元素可以是 Property 元素的 子專案。

 

  • 注釋專案(允許零個或多個專案)

注意

Annotation 項目必須出現在所有其他子項目之後。 注釋元素只能在 CSDL v2 和更新版本中使用。

 

適用屬性

下表描述可套用至 Parameter 元素的屬性。

屬性名稱 是必要的
名稱 Yes 參數名稱。
類型 No 參數型別。 參數可以是下列任何一種類型(或這些類型的集合):
EdmSimpleType
實體類型
複雜類型
列類型
參考類型
可為 Null No True (預設值)或 False ,視屬性是否可以有 Null 值而定。
DefaultValue No 屬性的預設值。
MaxLength No 屬性值的最大長度。
FixedLength No True False ,視屬性值是否儲存為固定長度字串而定。
有效位數 No 屬性值的有效位數。
縮放比例 No 屬性值的小數位數。
SRID No 空間系統參考識別碼。 僅適用于空間類型的屬性。 如需詳細資訊,請參閱 SRID SRID (SQL Server)
Unicode No True False ,視屬性值是否儲存為 Unicode 字串而定。
定序 No 指定資料來源中使用之定序順序的字串。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Parameter 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示使用一個 Parameter 子項目來定義函式參數的 Function 元素。

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
 <Parameter Name="Instructor" Type="SchoolModel.Person" />
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

Principal 項目 (CSDL)

概念結構定義語言中的 Principal 元素 (CSDL) 是 ReferentialConstraint 元素的子專案,可定義引用條件約束的主體結尾。 ReferentialConstraint 元素會定義類似于關係資料庫中參考完整性條件約束的功能。 同樣地,資料庫資料表的資料行 (或多個資料行) 可以參考其他資料表的主索引鍵,實體類型的屬性 (或多個屬性) 可以參考其他實體類型的實體索引鍵。 參考的實體類型稱為 條件約束的主體結尾 。 參考主體端的實體類型稱為 條件約束的相依端 PropertyRef 元素可用來指定相依端所參考的索引鍵。

Principal 元素可以有下列子項目(依所列的順序):

  • PropertyRef (一或多個元素)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 Principal 元素的屬性。

屬性名稱 是必要的
角色 Yes 位於關聯之主要端點的實體類型名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Principal 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 ReferentialConstraint 元素,該元素屬於 PublishedBy 關聯定義的 一部分。 Publisher 實體類型的 Id 屬性 構成引用條件約束的主體結尾。

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

Property 項目 (CSDL)

概念結構定義語言中的 Property 元素可以是 EntityType 元素、ComplexType 元素或 RowType 元素的子系。

EntityType 和 ComplexType 項目的應用程式

屬性 元素(作為 EntityType 或 ComplexType 元素的 子系)會定義實體類型實例或複雜類型實例將包含之資料的圖形和特性。 概念模型中的屬性類似類別中定義的屬性。 如同類別上的屬性可定義類別的圖形並包含關於物件的資訊,概念模型的屬性可定義實體類別的圖形,並包含關於實體類型執行個體的資訊。

Property 元素可以有下列子項目(依所列的順序):

  • 檔元素 (允許零個或一個元素)
  • 注釋專案(允許零個或多個專案)

下列 Facet 可以套用至 Property 元素:Nullable DefaultValue 、MaxLength、 FixedLength Precision Scale Unicode Collation ConcurrencyMode Facet 是 XML 屬性 (attribute),提供關於屬性 (property) 值如何儲存在資料存放區資訊。

注意

Facet 只能套用至 EDMSimpleType 類型的 屬性。

 

適用屬性

下表描述可套用至 Property 元素的屬性。

屬性名稱 是必要的
名稱 Yes 屬性的名稱。
類型 Yes 屬性值的型別。 屬性值類型必須是 EDMSimpleType 或模型範圍內的複雜類型(以完整名稱表示)。
可為 Null No True (預設值)或 False ,視屬性是否可以有 Null 值而定。
[!注意]
> 在 CSDL v1 中,複雜類型屬性必須有 Nullable="False"
DefaultValue No 屬性的預設值。
MaxLength No 屬性值的最大長度。
FixedLength No True False ,視屬性值是否儲存為固定長度字串而定。
有效位數 No 屬性值的有效位數。
縮放比例 No 屬性值的小數位數。
SRID No 空間系統參考識別碼。 僅適用于空間類型的屬性。 如需詳細資訊,請參閱 SRID SRID (SQL Server)
Unicode No True False ,視屬性值是否儲存為 Unicode 字串而定。
定序 No 指定資料來源中使用之定序順序的字串。
ConcurrencyMode No (預設值) 或 [已修正 ]。 如果值設定為 Fixed ,則會在開放式平行存取檢查中使用 屬性值。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Property 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示具有三 Property 元素的 EntityType 元素:

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

下列範例顯示具有五 Property 元素的 ComplexType 元素:

 <ComplexType Name="Address" >
   <Property Type="String" Name="StreetAddress" Nullable="false" />
   <Property Type="String" Name="City" Nullable="false" />
   <Property Type="String" Name="StateOrProvince" Nullable="false" />
   <Property Type="String" Name="Country" Nullable="false" />
   <Property Type="String" Name="PostalCode" Nullable="false" />
 </ComplexType>

 

RowType 項目的應用程式

屬性 元素(作為 RowType 元素的 子系)會定義可傳遞至模型定義函式或從模型定義函數傳回之資料的圖形和特性。  

Property 元素可以有下列其中一個子項目:

  • CollectionType
  • ReferenceType
  • RowType

Property 元素可以有任意數目的子批註專案。

注意

注釋元素只能在 CSDL v2 和更新版本中使用。

 

適用屬性

下表描述可套用至 Property 元素的屬性。

屬性名稱 是必要的
名稱 Yes 屬性的名稱。
類型 Yes 屬性值的型別。
可為 Null No True (預設值)或 False ,視屬性是否可以有 Null 值而定。
[!注意]
> 在 CSDL v1 中,複雜類型屬性必須有 Nullable="False"
DefaultValue No 屬性的預設值。
MaxLength No 屬性值的最大長度。
FixedLength No True False ,視屬性值是否儲存為固定長度字串而定。
有效位數 No 屬性值的有效位數。
縮放比例 No 屬性值的小數位數。
SRID No 空間系統參考識別碼。 僅適用于空間類型的屬性。 如需詳細資訊,請參閱 SRID SRID (SQL Server)
Unicode No True False ,視屬性值是否儲存為 Unicode 字串而定。
定序 No 指定資料來源中使用之定序順序的字串。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Property 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 屬性 元素,用來定義模型定義函式之傳回型別的圖形。

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

 

 

PropertyRef 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 PropertyRef 元素會參考實體類型的 屬性,指出屬性將執行下列其中一個角色:

  • 實體索引鍵的一部分 (可判斷識別之實體類型的屬性或屬性集)。 一或多個 PropertyRef 元素可用來定義實體索引鍵。
  • 參考條件約束的相依端點和主要端點。

PropertyRef 元素只能有注釋專案(零個或多個)做為子項目。

注意

注釋元素只能在 CSDL v2 和更新版本中使用。

 

適用屬性

下表描述可套用至 PropertyRef 元素的屬性。

屬性名稱 是必要的
名稱 Yes 參考屬性的名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 PropertyRef 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例會定義實體類型 ( Book )。 實體索引鍵是藉由參考 實體類型的 ISBN 屬性來定義。

 <EntityType Name="Book">
   <Key>
     <PropertyRef Name="ISBN" />
   </Key>
   <Property Type="String" Name="ISBN" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" />
   <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
   <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                       FromRole="Book" ToRole="Publisher" />
   <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                       FromRole="Book" ToRole="Author" />
 </EntityType>

 

在下一個範例中,會使用兩個 PropertyRef 元素來指出兩個屬性 ( Id PublisherId ) 是引用條件約束的主體和相依端。

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

ReferenceType 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 ReferenceType 元素會指定實體類型的參考。 ReferenceType 元素可以是下列專案的子系:

  • ReturnType (函式)
  • 參數
  • CollectionType

在定義函式的參數或傳回型別時,會使用 ReferenceType 元素。

ReferenceType 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 ReferenceType 元素的屬性。

屬性名稱 是必要的
類型 Yes 參考之實體類型的名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 ReferenceType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示 做為 Model 定義函式中 Parameter 元素子系的 ReferenceType 元素,該函式接受 Person 實體類型的參考

 <Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
   <Parameter Name="instructor">
     <ReferenceType Type="SchoolModel.Person" />
   </Parameter>
   <DefiningExpression>
   Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
   </DefiningExpression>
 </Function>

 

下列範例顯示 當做傳回 Person 實體類型參考之模型定義函式中 ReturnType (Function) 元素的 子系使用的 ReferenceType 元素:

 <Function Name="GetPersonReference">
     <Parameter Name="p" Type="SchoolModel.Person" />
     <ReturnType>
         <ReferenceType Type="SchoolModel.Person" />
     </ReturnType>
     <DefiningExpression>
           REF(p)
     </DefiningExpression>
 </Function>

 

 

ReferentialConstraint 項目 (CSDL)

概念結構定義語言中的 ReferentialConstraint 元素會定義類似于關係資料庫中參考完整性條件約束的功能。 同樣地,資料庫資料表的資料行 (或多個資料行) 可以參考其他資料表的主索引鍵,實體類型的屬性 (或多個屬性) 可以參考其他實體類型的實體索引鍵。 參考的實體類型稱為 條件約束的主體結尾 。 參考主體端的實體類型稱為 條件約束的相依端

如果一個實體類型上公開的外鍵參考另一個實體類型上的屬性, ReferentialConstraint 元素會定義兩個實體類型之間的關聯。 由於 ReferentialConstraint 元素提供兩個實體類型相關的相關資訊,因此對應規格語言中不需要對應的 AssociationSetMapping 元素。 兩個未公開外鍵的實體類型之間的關聯必須有對應的 AssociationSetMapping 元素,才能將關聯資訊對應至資料來源。

如果未在實體類型上公開外鍵, ReferentialConstraint 元素只能定義實體類型與另一個實體類型之間的主鍵對主鍵條件約束。

ReferentialConstraint 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 主體 (正好一個專案)
  • 相依性 (正好一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

ReferentialConstraint 元素可以有任意數目的注釋屬性(自訂 XML 屬性)。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

範例

下列範例顯示作為 PublishedBy 關聯定義的 部分使用的 ReferentialConstraint 元素。

 <Association Name="PublishedBy">
   <End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
   </End>
   <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
   <ReferentialConstraint>
     <Principal Role="Publisher">
       <PropertyRef Name="Id" />
     </Principal>
     <Dependent Role="Book">
       <PropertyRef Name="PublisherId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

 

 

ReturnType (Function) 元素 (CSDL)

概念結構定義語言中的 ReturnType (Function) 元素會指定 Function 元素中定義的函式傳回型別。 您也可以使用 ReturnType 屬性來指定函式傳回型別。

傳回型別可以是任何 EdmSimpleType 、實體類型、複雜類型、資料列類型、ref 類型,或其中一種類型的集合。

您可以使用 ReturnType (Function) 專案的 Type 屬性 或下列其中一個子項目來指定 函式的傳回型別:

  • CollectionType
  • ReferenceType
  • RowType

注意

如果您同時指定具有 ReturnType (Function) 元素的 Type 屬性和其中一個子項目的 函式傳回型 別,模型將不會驗證。

 

適用屬性

下表描述可套用至 ReturnType (Function) 元素的屬性。

屬性名稱 是必要的
ReturnType No 此函式傳回的型別。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 ReturnType (Function) 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例會使用 Function 元素來定義函式,以傳回書籍已列印的年數。 請注意,傳回型別是由 ReturnType (Function) 專案的 Type 屬性 所指定。

 <Function Name="GetYearsInPrint">
   <ReturnType Type=="Edm.Int32">
   <Parameter Name="book" Type="BooksModel.Book" />
   <DefiningExpression>
    Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
   </DefiningExpression>
 </Function>

 

 

ReturnType (FunctionImport) 元素 (CSDL)

概念結構定義語言中的 ReturnType (FunctionImport) 元素 (CSDL) 會指定 FunctionImport 元素中定義之函式的傳回型別。 您也可以使用 ReturnType 屬性來指定函式傳回型別。

傳回型別可以是實體類型、複雜類型或 EdmSimpleType 的任何集合,

函式的傳回型別是以 ReturnType (FunctionImport) 專案的 Type 屬性 指定

適用屬性

下表描述可套用至 ReturnType (FunctionImport) 元素的屬性。

屬性名稱 是必要的
類型 No 函式傳回的型別。 此值必須是 ComplexType、EntityType 或 EDMSimpleType 的集合。
EntitySet No 如果函式傳回實體類型的集合,EntitySet 的值 必須是集合所屬的實體集。 否則, 不得使用 EntitySet 屬性。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 ReturnType (FunctionImport) 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例使用 會傳回書籍和發行者的 FunctionImport 。 請注意,函式會傳回兩個結果集,因此會指定兩個 ReturnType (FunctionImport) 元素。

 <FunctionImport Name="GetBooksAndPublishers">
   <ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
   <ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
 </FunctionImport>

 

 

RowType 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 RowType 元素會將未命名的結構定義為概念模型中定義之函式的參數或傳回型別。

RowType 元素可以是下列元素的子系:

  • CollectionType
  • 參數
  • ReturnType (函式)

RowType 元素可以有下列子項目(依所列的順序):

  • 屬性 (一或多個)
  • 注釋專案 (零個或多個)

適用屬性

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 RowType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

範例

下列範例顯示模型定義的函式,該函式會使用 CollectionType 元素來指定函式會傳回資料列集合(如 RowType 元素中所 指定)。

 <Function Name="LastNamesAfter">
   <Parameter Name="someString" Type="Edm.String" />
   <ReturnType>
    <CollectionType>
      <RowType>
        <Property Name="FirstName" Type="Edm.String" Nullable="false" />
        <Property Name="LastName" Type="Edm.String" Nullable="false" />
      </RowType>
    </CollectionType>
   </ReturnType>
   <DefiningExpression>
             SELECT VALUE ROW(p.FirstName, p.LastName)
             FROM SchoolEntities.People AS p
             WHERE p.LastName &gt;= somestring
   </DefiningExpression>
 </Function>

Schema 項目 (CSDL)

Schema 元素是概念模型定義的根項目。 其中包含組成概念模型的物件、函式和容器等定義。

Schema 元素可能包含下列子項目的零或多個:

  • 使用
  • EntityContainer
  • EntityType
  • EnumType
  • 關聯
  • ComplexType
  • 函式

Schema 元素可能包含零或一個 Annotation 元素。

注意

只有 CSDL v2 和更新版本中才允許 Function 元素和注釋專案。

 

Schema 元素會 使用 Namespace 屬性來定義概念模型中實體類型、複雜類型和關聯物件的命名空間。 在命名空間中,兩個物件不能有相同的名稱。 命名空間可以跨越多個 架構 元素和多個 .csdl 檔案。

概念模型命名空間與 Schema 元素的 XML 命名空間不同。 概念模型命名空間(如 Namespace 屬性所定義 )是實體類型、複雜類型和關聯類型的邏輯容器。 Schema 元素的 XML 命名空間(以 xmlns 屬性工作表示)是 Schema 元素之子專案和屬性 的預設命名空間。 表單 https://schemas.microsoft.com/ado/YYYY/MM/edm 的 XML 命名空間(其中 YYYY 和 MM 分別代表一年和月)保留給 CSDL。 自訂項目和屬性不能出現在擁有此格式的命名空間中。

適用屬性

下表描述屬性可以套用至 Schema 元素。

屬性名稱 是必要的
Namespace Yes 概念模型的命名空間。 Namespace 屬性的值 是用來形成型別的完整名稱。 例如,如果名為 Customer 的 EntityType 位於 Simple.Example.Model 命名空間中,EntityType 的完整名稱就是 SimpleExampleModel.Customer。
下列字串無法做為 Namespace 屬性的值 系統 暫時性 Edm 。 Namespace 屬性的值 不能與 SSDL 架構元素中 Namespace 屬性的值 相同。
別名 No 用來取代命名空間名稱的識別項。 例如,如果名為 Customer 的 EntityType 位於 Simple.Example.Model 命名空間中,且 Alias 屬性的值是 Model ,您可以使用 Model.Customer 作為 EntityType 的完整名稱

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Schema 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示包含 EntityContainer 元素、兩 EntityType 元素和一個 Association 元素的 Schema 元素。

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
      xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
      xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
       Namespace="ExampleModel" Alias="Self">
         <EntityContainer Name="ExampleModelContainer">
           <EntitySet Name="Customers"
                      EntityType="ExampleModel.Customer" />
           <EntitySet Name="Orders" EntityType="ExampleModel.Order" />
           <AssociationSet
                       Name="CustomerOrder"
                       Association="ExampleModel.CustomerOrders">
             <End Role="Customer" EntitySet="Customers" />
             <End Role="Order" EntitySet="Orders" />
           </AssociationSet>
         </EntityContainer>
         <EntityType Name="Customer">
           <Key>
             <PropertyRef Name="CustomerId" />
           </Key>
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
           <Property Type="String" Name="Name" Nullable="false" />
           <NavigationProperty
                    Name="Orders"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Customer" ToRole="Order" />
         </EntityType>
         <EntityType Name="Order">
           <Key>
             <PropertyRef Name="OrderId" />
           </Key>
           <Property Type="Int32" Name="OrderId" Nullable="false" />
           <Property Type="Int32" Name="ProductId" Nullable="false" />
           <Property Type="Int32" Name="Quantity" Nullable="false" />
           <NavigationProperty
                    Name="Customer"
                    Relationship="ExampleModel.CustomerOrders"
                    FromRole="Order" ToRole="Customer" />
           <Property Type="Int32" Name="CustomerId" Nullable="false" />
         </EntityType>
         <Association Name="CustomerOrders">
           <End Type="ExampleModel.Customer"
                Role="Customer" Multiplicity="1" />
           <End Type="ExampleModel.Order"
                Role="Order" Multiplicity="*" />
           <ReferentialConstraint>
             <Principal Role="Customer">
               <PropertyRef Name="CustomerId" />
             </Principal>
             <Dependent Role="Order">
               <PropertyRef Name="CustomerId" />
             </Dependent>
           </ReferentialConstraint>
         </Association>
       </Schema>

 

 

TypeRef 項目 (CSDL)

概念結構定義語言 (CSDL) 中的 TypeRef 元素會提供現有具名型別的參考。 TypeRef 元素可以是 CollectionType 專案的子系,用來指定函式具有集合做為參數或傳回型別。

TypeRef 元素可以有下列子項目(依所列的順序):

  • 檔 (零或一個專案)
  • 注釋專案 (零個或多個元素)

適用屬性

下表描述可套用至 TypeRef 元素的屬性。 請注意, DefaultValue MaxLength、 FixedLength Precision Scale Unicode Collation 屬性僅適用于 EDMSimpleTypes

屬性名稱 是必要的
類型 No 所參考的型別名稱。
可為 Null No True (預設值)或 False ,視屬性是否可以有 Null 值而定。
[!注意]
> 在 CSDL v1 中,複雜類型屬性必須有 Nullable="False"
DefaultValue No 屬性的預設值。
MaxLength No 屬性值的最大長度。
FixedLength No True False ,視屬性值是否儲存為固定長度字串而定。
有效位數 No 屬性值的有效位數。
縮放比例 No 屬性值的小數位數。
SRID No 空間系統參考識別碼。 僅適用于空間類型的屬性。 如需詳細資訊,請參閱 SRID SRID (SQL Server)
Unicode No True False ,視屬性值是否儲存為 Unicode 字串而定。
定序 No 指定資料來源中使用之定序順序的字串。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 CollectionType 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例顯示模型定義的函式,該函式會使用 TypeRef 元素(做為 CollectionType 元素的 子系)來指定函式接受 Department 實體類型的集合。

 <Function Name="GetAvgBudget">
      <Parameter Name="Departments">
          <CollectionType>
             <TypeRef Type="SchoolModel.Department"/>
          </CollectionType>
           </Parameter>
       <ReturnType Type="Collection(Edm.Decimal)"/>
       <DefiningExpression>
             SELECT VALUE AVG(d.Budget) FROM Departments AS d
       </DefiningExpression>
 </Function>

 

 

Using 項目 (CSDL)

念架構定義語言中的 Using 元素會匯入存在於不同命名空間中的概念模型內容。 藉由設定 Namespace 屬性的值 ,您可以參考另一個概念模型中定義的實體類型、複雜類型和關聯類型。 多個 Using 元素可以是 Schema 元素的 子系。

注意

CSDL 中的 Using 元素的運作方式與程式設計語言中的 using 語句完全相同 。 藉由使用程式設計語言的 using 語句匯入命名空間 ,您不會影響原始命名空間中的物件。 在 CSDL 中,匯入的命名空間可以包含實體類型,該實體類型是衍生自原始命名空間中的實體類型。 這會影響在原始命名空間中宣告的實體集。

 

Using 元素可以有下列子項目:

  • 檔 (允許零個或一個元素)
  • 注釋專案(允許零個或多個專案)

適用屬性

下表描述屬性可以套用至 Using 元素。

屬性名稱 是必要的
Namespace Yes 匯入的命名空間名稱。
別名 Yes 用來取代命名空間名稱的識別項。 雖然這個屬性是必要的,但是不必使用此屬性取代命名空間名稱,來限定物件名稱。

 

注意

任何數目的注釋屬性(自訂 XML 屬性)都可以套用至 Using 元素。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留給 CSDL 之用。 任兩個自訂屬性的完整名稱不能相同。

 

範例

下列範例示範 使用 Using 元素匯入其他地方定義的命名空間。 請注意,顯示的 Schema 元素命名空間 BooksModelAddressEntityType 上的 Publisher 屬性是一種複雜類型,定義于命名空間中 ExtendedBooksModel (使用 Using 元素匯入)。

 <Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
           xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
           xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
           Namespace="BooksModel" Alias="Self">

     <Using Namespace="BooksModel.Extended" Alias="BMExt" />

 <EntityContainer Name="BooksContainer" >
       <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
     </EntityContainer>

 <EntityType Name="Publisher">
       <Key>
         <PropertyRef Name="Id" />
       </Key>
       <Property Type="Int32" Name="Id" Nullable="false" />
       <Property Type="String" Name="Name" Nullable="false" />
       <Property Type="BMExt.Address" Name="Address" Nullable="false" />
     </EntityType>

 </Schema>

 

 

註釋屬性 (CSDL)

概念結構描述定義語言 (CSDL) 中的附註屬性是概念模型中自訂的 XML 屬性。 除了擁有有效的 XML 結構外,下列附註屬性的條件必須成立:

  • 附註屬性不能在任何 XML 命名空間之中,這是保留供 CSDL 之用。
  • 超過一個以上的附註屬性可以套用至給定的 CSDL 項目。
  • 任兩個 Annotation 屬性的完整名稱不能相同。

附註屬性可用來提供與概念模型中之項目有關的額外中繼資料。 您可以使用 System.Data.Metadata.Edm 命名空間中的類別,在執行時間存取注釋元素中包含的中繼資料。

範例

下列範例顯示 具有注釋屬性的 EntityType 元素( CustomAttribute )。 下列範例也顯示套用至實體類型項目的 Annotation 項目。

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

下列程式碼會擷取附註屬性中的中繼資料,並且將它撰寫至主控台:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

以上程式碼假設 School.csdl 檔位於專案的輸出目錄中,而且您已將下列 ImportsUsing 陳述式加入至專案:

 using System.Data.Metadata.Edm;

 

 

註釋項目 (CSDL)

概念結構定義語言 (CSDL) 中的 Annotation 項目是概念模型中的自訂 XML 項目。 除了擁有有效的 XML 結構外,下列 Annotation 項目的條件也必須成立:

  • Annotation 項目不能存在於保留供 CSDL 使用的任何 XML 命名空間中。
  • 多個 Annotation 項目可以同時為指定 CSDL 項目的子系。
  • 任兩個 Annotation 項目的完整名稱不能相同。
  • Annotation 項目必須出現在指定 CSDL 項目的所有其他子項目之後。

Annotation 項目可用來提供與概念模型中之項目有關的額外中繼資料。 從 .NET Framework 第 4 版開始,您可以使用 System.Data.Metadata.Edm 命名空間中的類別,在執行時間存取注釋元素中包含的中繼資料。

範例

下列範例顯示 具有注釋專案 ( CustomElement ) 的 EntityType 元素。 該範例也顯示套用至實體類型項目的 annotation 屬性。

 <Schema Namespace="SchoolModel" Alias="Self"
         xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
         xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
   <EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
     <EntitySet Name="People" EntityType="SchoolModel.Person" />
   </EntityContainer>
   <EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
               p:CustomAttribute="Data here.">
     <Key>
       <PropertyRef Name="PersonID" />
     </Key>
     <Property Name="PersonID" Type="Int32" Nullable="false"
               annotation:StoreGeneratedPattern="Identity" />
     <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="FirstName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
     <Property Name="HireDate" Type="DateTime" />
     <Property Name="EnrollmentDate" Type="DateTime" />
     <p:CustomElement>
       Custom metadata.
     </p:CustomElement>
   </EntityType>
 </Schema>

 

下列程式碼會擷取 annotation 項目中的中繼資料,並且將它撰寫至主控台:

 EdmItemCollection collection = new EdmItemCollection("School.csdl");
 MetadataWorkspace workspace = new MetadataWorkspace();
 workspace.RegisterItemCollection(collection);
 EdmType contentType;
 workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
 if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

以上程式碼假設 School.csdl 檔位於專案的輸出目錄中,而且您已將下列 ImportsUsing 陳述式加入至專案:

 using System.Data.Metadata.Edm;

 

 

概念模型類型 (CSDL)

概念結構定義語言 (CSDL) 支援一組稱為 EDMSimpleTypes 的抽象基本資料類型,定義概念模型中的屬性。 EDMSimpleTypes 是儲存體或裝載環境中支援之基本資料類型的 Proxy。

下表列出 CSDL 所支援的基本資料型別。 資料表也會列出可套用至每個 EDMSimpleType 的 Facet。

EDMSimpleType 描述 適用的 Facet
Edm.Binary 包含二進位資料。 MaxLength、FixedLength、Nullable、Default
Edm.Boolean 包含 true false Nullable、Default
Edm.Byte 包含不帶正負號的 8 位元整數值。 Precision、Nullable、Default
Edm.DateTime 表示日期和時間。 Precision、Nullable、Default
Edm.DateTimeOffset 包含與 GMT 的日期和時間時差 (以分鐘為單位)。 Precision、Nullable、Default
Edm.Decimal 包含固定有效位數和小數位數的數值。 Precision、Nullable、Default
Edm.Double 包含具有 15 位數精確度的浮點數 Precision、Nullable、Default
Edm.Float 包含具有 7 位數精確度的浮點數。 Precision、Nullable、Default
Edm.Guid 包含 16 位元組的唯一識別碼。 Precision、Nullable、Default
Edm.Int16 包含帶正負號的 16 位元整數值。 Precision、Nullable、Default
Edm.Int32 包含帶正負號的 32 位元整數值。 Precision、Nullable、Default
Edm.Int64 包含帶正負號的 64 位元整數值。 Precision、Nullable、Default
Edm.SByte 包含帶正負號的 8 位元整數值。 Precision、Nullable、Default
Edm.String 包含字元資料。 Unicode、FixedLength、MaxLength、Collation、Precision、Nullable、Default
Edm.Time 包含一天的時間。 Precision、Nullable、Default
Edm.Geography 可為 Null、預設值、SRID
Edm.GeographyPoint 可為 Null、預設值、SRID
Edm.GeographyLineString 可為 Null、預設值、SRID
Edm.GeographyPolygon 可為 Null、預設值、SRID
Edm.GeographyMultiPoint 可為 Null、預設值、SRID
Edm.GeographyMultiLineString 可為 Null、預設值、SRID
Edm.GeographyMultiPolygon 可為 Null、預設值、SRID
Edm.GeographyCollection 可為 Null、預設值、SRID
Edm.Geometry 可為 Null、預設值、SRID
Edm.GeometryPoint 可為 Null、預設值、SRID
Edm.GeometryLineString 可為 Null、預設值、SRID
Edm.GeometryPolygon 可為 Null、預設值、SRID
Edm.GeometryMultiPoint 可為 Null、預設值、SRID
Edm.GeometryMultiLineString 可為 Null、預設值、SRID
Edm.GeometryMultiPolygon 可為 Null、預設值、SRID
Edm.GeometryCollection 可為 Null、預設值、SRID

Facet (CSDL)

概念結構定義語言 (CSDL) 中的 Facet 表示實體型別和複雜型別屬性上的條件約束。 Facet 在下列 CSDL 元素上會以 XML 屬性的形式出現:

  • 屬性
  • TypeRef
  • 參數

下表說明 CSDL 中支援的 Facet。 所有的 Facet 都是選擇性的。 從概念模型產生資料庫時,Entity Framework 會使用下面所列的某些 Facet。

注意

如需概念模型中資料類型的相關資訊,請參閱概念模型類型(CSDL)。

Facet 描述 適用於 用於產生資料庫 由執行階段所使用
定序 在執行比較和排序屬性值的作業時,指定要使用的定序順序 (或排序順序)。 Edm.String No
ConcurrencyMode 表示屬性值應用於開放式並行存取檢查。 所有 EDMSimpleType 屬性 No Yes
Default 執行個體化時如果沒有提供值,請指定屬性的預設值。 所有 EDMSimpleType 屬性 Yes Yes
FixedLength 指定屬性值的長度是否可以變更。 Edm.Binary Edm.String
MaxLength 指定屬性值的最大長度。 Edm.Binary Edm.String No
可為 Null 指定 屬性是否可以有 Null 值。 所有 EDMSimpleType 屬性 Yes Yes
有效位數 針對 Decimal 類型的 屬性,指定屬性值可以擁有的位數。 針對 Time 、DateTime 和 DateTimeOffset 類型的 屬性,指定屬性值小數部分的數位 數。 Edm.DateTime、 Edm.DateTimeOffset Edm.Decimal Edm.Time No
縮放比例 指定屬性值小數點右邊的位數。 Edm.Decimal No
SRID 指定空間系統參考系統識別碼。 如需詳細資訊,請參閱 SRID SRID (SQL Server) Edm.Geography、Edm.GeographyPoint、Edm.GeographyLineString、Edm.GeographyPolygon、Edm.GeographyMultiPoint、Edm.GeographyMultiLineString、 Edm.GeographyMultiPolygon、Edm.GeographyCollection、Edm.Geometry、Edm.GeometryPoint、Edm.GeometryLineString、Edm.GeometryPolygon、Edm.GeometryMultiPoint、Edm.GeometryMultiLineString、Edm.GeometryMultiPolygon、Edm.GeometryCollection No Yes
Unicode 指出屬性值是否儲存為 Unicode。 Edm.String Yes

注意

從概念模型產生資料庫時,如果 Property 元素位於下列命名空間,[產生資料庫精靈] 會辨識 Property 元素上的 StoreGeneratedPattern 屬性值: https://schemas.microsoft.com/ado/2009/02/edm/annotation 。 屬性 的支援值為 Identity Computed 。 Identity 的值 會產生資料庫資料行,其中包含資料庫中產生的識別值。 Computed 的值 會產生具有資料庫中計算之值的資料行。

範例

下列範例顯示 Facet 套用至實體類型的屬性:

 <EntityType Name="Product">
   <Key>
     <PropertyRef Name="ProductId" />
   </Key>
   <Property Type="Int32"
             Name="ProductId" Nullable="false"
             a:StoreGeneratedPattern="Identity"
    xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
   <Property Type="String"
             Name="ProductName"
             Nullable="false"
             MaxLength="50" />
   <Property Type="String"
             Name="Location"
             Nullable="true"
             MaxLength="25" />
 </EntityType>