다음을 통해 공유


CSDL 사양

참고 항목

CSDL v1이 지원되지 않습니다. V3로 업데이트하세요.

CSDL(개념 스키마 정의 언어)은 데이터 기반 애플리케이션의 개념적 모델을 구성하는 엔터티, 관계 및 함수를 설명하는 XML 기반 언어입니다. 이 개념적 모델은 Entity Framework 또는 WCF Data Services에서 사용할 수 있습니다. CSDL로 설명되는 메타데이터는 Entity Framework에서 개념적 모델에 정의된 엔터티와 관계를 데이터 원본에 매핑하는 데 사용됩니다. 자세한 내용은 SSDL 사양MSL 사양을 참조하세요.

CSDL은 Entity Framework의 엔터티 데이터 모델 구현입니다.

Entity Framework 애플리케이션에서 개념적 모델 메타데이터는 .csdl 파일(CSDL로 작성됨)에서 System.Data.Metadata.Edm.EdmItemCollection 인스턴스로 로드되고 System.Data.Metadata.Edm.MetadataWorkspace 클래스의 메서드를 사용하여 액세스할 수 있습니다. Entity Framework는 개념적 모델 메타데이터를 사용하여 개념적 모델에 대한 쿼리를 데이터 원본 관련 명령으로 변환합니다.

EF 디자이너는 개념적 모델 정보를 디자인 타임에 .edmx 파일로 저장합니다. 빌드 시 EF 디자이너는 .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 요소는 두 엔터티 형식 간의 관계를 정의합니다. 연결은 관계에 관련된 엔터티 형식과 복합성이라도 하는 관계의 각 End에 있는 가능한 엔터티 형식 수를 지정해야 합니다. 연결 끝의 다중성 값은 한 개(1), 0개 이상(0..1) 또는 다수(*)일 수 있습니다. 이 정보는 두 자식 End 요소에 지정되어 있습니다.

연결의 한 End에 있는 엔터티 형식 인스턴스는 엔터티 형식에서 노출된 경우 탐색 속성 또는 외래 키를 통해 액세스할 수 있습니다.

애플리케이션에서 연결 인스턴스는 엔터티 형식 인스턴스 사이의 특정 연결을 나타냅니다. 연결 인스턴스는 연결 집합에 논리적으로 그룹화됩니다.

Association 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • End(요소 정확히 2개)
  • ReferentialConstraint(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 Association 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 연결의 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Association 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 외래 키가 CustomerOrder 엔터티 형식에 노출되지 않은 경우 CustomerOrders 연결을 정의하는 Association 요소를 보여 줍니다. 각 연결 Multiplicity 값은 여러 Order가 한 Customer와 연결될 수 있지만 단 한 Customer만 한 가지 Order와 연결될 수 있음을 나타냅니다. 또한 OnDelete 요소는 Customer를 삭제할 경우 특정 Customer와 관련 있고 ObjectContext에 로드된 모든 Order가 삭제됨을 나타냅니다.

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

 

다음 예제에서는 외래 키가 CustomerOrder 엔터티 형식에 노출된 경우 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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개 허용)
  • End(요수 정확히 2개 필요)
  • Annotation 요소(요소 0개 이상 허용)

Association 특성은 연결 집합에 포함되는 연결 형식을 지정합니다. 연결 집합의 끝을 구성하는 엔터티 집합은 정확히 두 개의 자식 End 요소로 지정됩니다.

적용 가능한 특성

다음 표에서는 AssociationSet 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 엔터티 집합의 이름입니다. Name 특성 값은 Association 특성 값과 같을 수 없습니다.
Association 연결 집합에 포함되는 인스턴스의 연결에 대한 정규화된 이름입니다. 연결은 연결 집합과 동일한 네임스페이스에 있어야 합니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 AssociationSet 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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, UnicodeCollation 특성은 EDMSimpleTypes 컬렉션에만 적용됩니다.

특성 이름 필수
Type 아니요 모음 유형.
Nullable 아니요 속성이 null 값을 가질 수 있는지 여부에 따라 True(기본값) 또는 False입니다.
[!NOTE]
> CSDL v1의 복합 형식 속성에는 Nullable="False"가 있어야 합니다.
DefaultValue 아니요 속성의 기본값입니다.
MaxLength 아니요 속성 값의 최대 길이입니다.
FixedLength 아니요 속성 값이 고정 길이 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
정밀도 아니요 속성 값의 전체 자릿수입니다.
확장 아니요 속성 값의 소수 자릿수입니다.
SRID 아니요 공간 시스템 참조 식별자입니다. 공간 형식의 속성에만 유효합니다.   자세한 내용은 SRIDSRID(SQL Server)를 참조하세요.
Unicode 아니요 속성 값이 유니코드 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
데이터 정렬 아니요 데이터 소스에 사용될 데이터 정렬 순서를 지정하는 문자열입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 CollectionType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Property(요소 0개 이상)
  • Annotation 요소(요소 0개 이상)

다음 표에서는 ComplexType 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
속성 복합 형식의 이름입니다. 복합 형식의 이름은 모델 범위 내에 있는 다른 복합 형식, 엔터티 형식 또는 연결의 이름과 같을 수 없습니다.
BaseType 아니요 정의되는 복합 형식의 기본 형식인 다른 복합 형식의 이름입니다.
[!NOTE]
> 이 특성은 CSDL v1에 적용할 수 없습니다. 복합 형식에 대한 상속은 해당 버전에서 지원되지 않습니다.
요약 아니요 복합 형식이 추상 형식인지 여부에 따라 True 또는 False(기본값)입니다.
[!NOTE]
> 이 특성은 CSDL v1에 적용할 수 없습니다. 해당 버전의 복합 형식은 추상 형식일 수 없습니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 ComplexType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 EdmSimpleType 속성이 StreetAddress, City, StateOrProvince, Country, PostalCode인 복합 형식의 Address를 보여 줍니다.

 <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(위)를 엔터티 형식의 속성으로 정의하려면 엔터티 형식 정의에서 속성 형식을 선언해야 합니다. 다음 예제에서는 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)

CSDL(개념 스키마 정의 언어)의 DefiningExpression 요소에는 개념적 모델의 함수를 정의하는 Entity SQL 식이 포함되어 있습니다.  

참고 항목

유효성을 검사하기 위해 DefiningExpression 요소에 임의의 콘텐츠를 포함할 수 있습니다. 그러나 DefiningExpression 요소에 유효한 Entity SQL이 포함되어 있지 않으면 Entity Framework가 런타임에 예외를 throw합니다.

 

적용 가능한 특성

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 DefiningExpression 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

예시

다음 예제에서는 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(요소 1개 이상)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 Dependent 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
역할 연결의 종속 끝에 있는 엔터티 형식의 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Dependent 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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)

CSDL(개념 스키마 정의 언어)의 Documentation 요소를 사용하여 부모 개체에 정의된 개체에 대한 정보를 제공할 수 있습니다. .edmx 파일에서 Documentation 요소가 엔터티, 연결 또는 속성과 같이 EF 디자이너의 디자인 화면에 개체로 나타나는 요소의 자식인 경우 Documentation 요소의 콘텐츠가 개체에 대한 Visual Studio 속성 창에 나타납니다.

Documentation 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Summary: 부모 요소에 대한 간단한 설명입니다. (0개 또는 한 개의 요소)
  • LongDescription: 부모 요소에 대한 자세한 설명입니다. (0개 또는 한 개의 요소)
  • Annotation 요소 (0개 이상의 요소)

적용 가능한 특성

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Documentation 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

예시

다음 예제에서는 EntityType 요소의 자식 요소인 Documentation 요소를 보여 줍니다. 다음의 코드 조각이 .edmx 파일의 CSDL 콘텐츠에 있는 경우 사용자가 Customer 엔터티 형식을 클릭하면 SummaryLongDescription 요소의 콘텐츠가 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 요소의 역할과 적용 가능한 특성은 서로 다릅니다.

Association 요소의 자식인 End 요소

Association 요소의 자식인 End 요소는 연결의 한쪽 끝에 있는 엔터티 형식과 연결의 해당 끝에 있을 수 있는 엔터티 형식 인스턴스의 수를 식별합니다. 연결 End는 연결의 일부로 정의되고 연결에는 정확히 두 개의 연결 End가 있어야 합니다. 연결의 한 End에 있는 엔터티 형식 인스턴스는 엔터티 형식에서 노출된 경우 탐색 속성 또는 외래 키를 통해 액세스할 수 있습니다.  

End 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • OnDelete(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 Association 요소의 자식인 경우 End 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
Type 연결의 한 End에 있는 엔터티 형식의 이름
역할 아니요 연결 End의 이름. 이름을 지정하지 않으면 연결 End에 있는 엔터티 형식의 이름이 사용됩니다.
다중성 연결의 끝에 있을 수 있는 엔터티 형식 인스턴스 수에 따라 1, 0..1 또는 *입니다.
1은 연결 끝에 엔터티 형식 인스턴스가 정확히 1개 있음을 나타냅니다.
0..1은 연결 끝에 엔터티 형식 인스턴스가 0개 또는 1개 있음을 나타냅니다.
*는 연결 끝에 엔터티 형식 인스턴스가 0개 또는 1개 이상 있음을 나타냅니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 End 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 CustomerOrders 연결을 정의하는 Association 요소를 보여 줍니다. 각 연결 Multiplicity 값은 여러 Order가 한 Customer와 연결될 수 있지만 단 한 Customer만 한 가지 Order와 연결될 수 있음을 나타냅니다. 또한 OnDelete 요소는 Customer를 삭제할 경우 특정 Customer와 관련 있고 ObjectContext에 로드된 모든 Order가 삭제됨을 나타냅니다.

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

 

AssociationSet 요소의 자식인 End 요소

End 요소는 연결 집합의 한쪽 끝을 지정합니다. AssociationSet 요소는 End 요소를 두 개 포함해야 합니다. End 요소에 포함된 정보는 연결 집합을 데이터 원본에 매핑할 때 사용됩니다.

End 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

참고 항목

Annotation 요소는 다른 모든 자식 요소 뒤에 와야 합니다. Annotation 요소는 CSDL v2 이상에서만 허용됩니다.

 

적용 가능한 특성

다음 표에서는 AssociationSet 요소의 자식인 경우 End 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
EntitySet 부모 AssociationSet 요소의 한쪽 끝을 정의하는 EntitySet 요소의 이름입니다. EntitySet 요소는 부모 AssociationSet 요소와 동일한 엔터티 컨테이너에 정의되어 있어야 합니다.
역할 아니요 연결 집합 End의 이름. Role 특성을 사용하지 않으면 연결 집합 끝의 이름이 엔터티 집합의 이름이 됩니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 End 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 각각 End 요소가 두 개 포함된 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>

 

 

EntityContainer 요소(CSDL)

CSDL(개념 스키마 정의 언어)의 EntityContainer 요소는 엔터티 집합, 연결 집합 및 함수 가져오기에 대한 논리적 컨테이너입니다. 개념적 모델 엔터티 컨테이너는 EntityContainerMapping 요소를 통해 저장소 모델 엔터티 컨테이너에 매핑됩니다. 스토리지 모델 엔터티 컨테이너는 데이터베이스의 구조를 설명합니다. 엔터티 집합은 데이터베이스의 테이블을 설명하고, 연결 집합은 데이터베이스의 외래 키 제약 조건을 설명하고, 함수 가져오기는 데이터베이스의 저장 프로시저를 설명합니다.

EntityContainer 요소에는 Documentation 요소가 0개 또는 1개 있을 수 있습니다. Documentation 요소가 있는 경우 모든 EntitySet, AssociationSetFunctionImport 요소 앞에 와야 합니다.

EntityContainer 요소에는 다음에 나열된 순서대로 자식 요소가 0개 이상 포함될 수 있습니다.

  • EntitySet
  • AssociationSet
  • FunctionImport
  • Annotation 요소

EntityContainer 요소를 확장하여 동일한 네임스페이스 내에 있는 다른 EntityContainer에 대한 콘텐츠를 포함할 수 있습니다. 다른 EntityContainer의 콘텐츠를 포함하려면 참조하는 EntityContainer 요소에서 Extends 특성의 값을 포함하려는 EntityContainer 요소의 이름으로 설정합니다. 포함된 EntityContainer 요소의 모든 자식 요소는 참조하는 EntityContainer 요소의 자식 요소로 처리됩니다.

적용 가능한 특성

다음 표에서는 Using 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 엔터티 컨테이너의 이름입니다.
Extends 아니요 동일한 네임스페이스 내에 있는 다른 엔터티 컨테이너의 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 EntityContainer 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 세 개의 엔터티 집합과 두 개의 연결 집합을 정의하는 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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation 요소(요소 0개 또는 1개 허용)
  • Annotation 요소(요소 0개 이상 허용)

적용 가능한 특성

다음 표에서는 EntitySet 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 엔터티 집합의 이름입니다.
EntityType 엔터티 집합에 포함되는 인스턴스의 엔터티 형식에 대한 정규화된 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 EntitySet 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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 요소는 개념적 모델에서 고객이나 주문과 같은 최상위 개념의 구조를 나타냅니다. 엔터티 형식은 애플리케이션에서 엔터티 형식 인스턴스에 대한 템플릿입니다. 각 템플릿에는 다음 정보가 들어 있습니다.

  • 고유한 이름 (필수)
  • 하나 이상의 속성에 의해 정의되는 엔터티 키 (필수)
  • 상위 데이터의 속성 (선택 사항)
  • 연결의 한 end에서 다른 end로의 탐색을 허용하는 탐색 속성. (선택 사항)

애플리케이션에서 엔터티 형식의 인스턴스는 특정 고객 또는 주문과 같은 특정 개체를 나타냅니다. 엔터티 집합 내에 각 엔터티 형식 인스턴스에 대한 고유한 엔터티 키가 있어야 합니다.

두 엔터티 형식 인스턴스는 형식이 동일하고 해당 엔터티 키 값이 동일한 경우에만 동일한 것으로 간주됩니다.

EntityType 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Key(요소 0개 또는 1개)
  • Property(요소 0개 이상)
  • NavigationProperty(요소 0개 이상)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 EntityType 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 엔터티 형식의 이름.
BaseType 아니요 정의되는 엔터티 형식의 기본 형식인 다른 엔터티 형식의 이름입니다.
요약 아니요 엔터티 형식이 추상 형식인지 여부에 따라 True 또는 False입니다.
OpenType 아니요 엔터티 형식이 개방형 엔터티 형식인지 여부에 따라 True 또는 False입니다.
[!NOTE]
> OpenType 특성은 ADO.NET Data Services에 사용되는 개념적 모델에 정의된 엔터티 형식에만 적용할 수 있습니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 EntityType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Member(요소 0개 이상)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 EnumType 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 엔터티 형식의 이름.
IsFlags 아니요 열거형 형식을 플래그 집합으로 사용할 수 있는지 여부에 따라 True 또는 False입니다. 기본값은 False.입니다.
UnderlyingType 아니요 형식의 값 범위를 정의하는 Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 또는 Edm.SByte입니다.   열거형 요소의 기본 형식은 Edm.Int32.입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 EnumType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 Member 요소가 세 개 있는 EnumType 요소를 보여 줍니다.

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

 

 

Function 요소(CSDL)

CSDL(개념 스키마 정의 언어)의 Function 요소는 개념적 모델에서 함수를 정의하거나 선언하는 데 사용됩니다. 함수는 DefiningExpression 요소를 사용하여 정의됩니다.  

Function 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Parameter(요소 0개 이상)
  • DefiningExpression(요소 0개 또는 1개)
  • ReturnType(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

함수 반환 형식은 ReturnType(Function) 요소 또는 ReturnType 특성(위 참조) 중 한 가지만 사용하여 지정해야 합니다. 둘 다 사용하면 안 됩니다. EdmSimpleType, 엔터티 형식, 복합 형식, 행 형식 또는 참조 형식(또는 이러한 형식 중 하나의 컬렉션)이 반환 형식이 될 수 있습니다.

적용 가능한 특성

다음 표에서는 Function 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 함수의 이름.
ReturnType 아니요 함수에서 반환하는 형식입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Function 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개 허용)
  • Parameter(요소 0개 이상 허용)
  • Annotation 요소(요소 0개 이상 허용)
  • Annotation 요소(요소 0개 이상 허용)

함수가 받아들이는 각 매개 변수에 대해 하나의 Parameter 요소를 정의해야 합니다.

함수의 반환 형식은 ReturnType(FunctionImport) 요소 또는 ReturnType 특성(아래 참조)으로 지정해야 합니다. 둘 다 지정하면 안 됩니다. 반환 형식 값은 EdmSimpleType, EntityType 또는 ComplexType의 컬렉션이어야 합니다.

적용 가능한 특성

다음 표에서는 FunctionImport 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 가져온 함수의 이름입니다.
ReturnType 아니요 함수에서 반환하는 형식입니다. 함수에서 값을 반환하지 않으면 이 특성을 사용하지 마십시오. 또는 값이 RowType, ComplexType, EntityType 또는 EDMSimpleType으로 되어야 합니다.
EntitySet 아니요 함수에서 엔터티 형식의 컬렉션을 반환하는 경우 FunctionImport 값은 컬렉션이 속한 엔터티 집합이어야 합니다. 그렇지 않은 경우 EntitySet 특성을 사용하면 안 됩니다.
IsComposable 아니요 값이 true로 설정된 경우 함수는 작성 가능(테이블 반환 함수)이며 LINQ 쿼리에서 사용할 수 있습니다.  기본값은 false입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 FunctionImport 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 하나의 매개 변수를 받아들이고 엔터티 형식의 컬렉션을 반환하는 FunctionImport 요소를 보여 줍니다.

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

 

 

Key 요소(CSDL)

Key 요소는 EntityType 요소의 자식 요소이며, 엔터티 키(ID를 확인하는 엔터티 형식의 속성 또는 속성 집합)를 정의합니다. 엔터티 키를 구성하는 속성은 디자인 타임에 선택됩니다. 엔터티 키 속성의 값은 런타임에 엔터티 집합 내에서 엔터티 형식 인스턴스를 고유하게 식별해야 합니다. 엔터티 키를 구성하는 속성을 선택하여 엔터티 집합에서 인스턴스의 고유성을 보장해야 합니다. Key 요소는 엔터티 형식의 속성을 하나 이상 참조하여 엔터티 키를 정의합니다.

Key 요소에는 다음과 같은 자식 요소가 있을 수 있습니다.

  • PropertyRef(요소 1개 이상)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Key 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

예시

다음 예제에서는 이름이 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(International Standard Book Number)은 책을 고유하게 식별하므로 엔터티 키에 대해 ISBN 속성을 사용하는 것이 좋습니다.

다음 예제에서는 두 가지 속성, NameAddress로 구성된 엔터티 키가 있는 엔터티 형식(Author)을 보여 줍니다.

 <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>

 

이름이 같은 두 저자가 같은 주소지에서 거주할 가능성은 없으므로 엔터티 키에 대해 NameAddress를 사용하는 것이 좋습니다. 그러나 이러한 엔터티 키 선택이 엔터티 집합에서의 고유한 엔터티 키를 절대적으로 보장하지는 않습니다. 이 경우에는 저자를 고유하게 식별하는 데 사용할 수 있는 AuthorId 등의 속성을 추가하는 것이 좋습니다.

 

Member 요소(CSDL)

Member 요소는 EnumType 요소의 자식 요소이며, 열거형 형식의 멤버를 정의합니다.

적용 가능한 특성

다음 표에서는 FunctionImport 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 멤버의 이름입니다.
아니요 멤버의 값입니다. 기본적으로 첫 번째 멤버의 값은 0이고 그 이후 각 열거자의 값은 순서대로 1씩 증가합니다. 값이 동일한 멤버가 여러 명 있을 수 있습니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 FunctionImport 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 Member 요소가 세 개 있는 EnumType 요소를 보여 줍니다.

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

 

 

NavigationProperty 요소는 연결의 다른 끝에 대한 참조를 제공하는 탐색 속성을 정의합니다. Property 요소를 사용하여 정의된 속성과 달리 탐색 속성은 데이터의 모양과 특징을 정의하지 않습니다. 이러한 속성은 두 엔터티 형식 사이의 연결을 탐색하는 방법을 제공합니다.

탐색 속성은 연결의 양쪽 End에 있는 엔터티 형식 모두에 대해 선택적 요소입니다. 연결의 End에 있는 한 엔터티 형식에 대해 탐색 속성을 정의하는 경우 연결의 다른 End에 있는 엔터티 형식에 대해서는 탐색 속성을 정의할 필요가 없습니다.

탐색 속성에 의해 반환된 데이터 형식은 해당 원격 연결 End의 복합성에 의해 결정됩니다. 예를 들어, OrdersNavProp 탐색 속성이 Customer 엔터티 형식에 존재하고 CustomerOrder 간의 일대다 연결을 탐색한다고 가정해 보겠습니다. 탐색 속성에 대한 원격 연결 끝은 다중성이 다수(*)이므로 해당 데이터 형식은 Order의 컬렉션입니다. 마찬가지로 CustomerNavProp 탐색 속성이 Order 엔터티 형식에 존재하는 경우 원격 끝의 다중성이 일(1)이므로 해당 데이터 형식은 Customer가 됩니다.

NavigationProperty 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 NavigationProperty 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 탐색 속성의 이름입니다.
관계 모델 범위 내에 있는 연결의 이름입니다.
ToRole 탐색이 끝나는 연결의 End입니다. ToRole 특성 값은 AssociationEnd 요소에 정의되어 있는 연결 끝 중 하나에 정의된 Role 특성 중 하나의 값과 같아야 합니다.
FromRole 탐색이 시작되는 연결의 End입니다. FromRole 특성 값은 AssociationEnd 요소에 정의되어 있는 연결 끝 중 하나에 정의된 Role 특성 중 하나의 값과 같아야 합니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 NavigationProperty 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 탐색 속성이 두 개(PublishedByWrittenBy) 있는 엔터티 형식(Book)을 정의합니다.

 <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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 OnDelete 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
동작 Cascade 또는 None입니다. Cascade인 경우 주 엔터티 형식이 삭제되면 종속 엔터티 형식도 삭제됩니다. None인 경우 주 엔터티 형식이 삭제되어도 종속 엔터티 형식이 삭제되지 않습니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Association 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 CustomerOrders 연결을 정의하는 Association 요소를 보여 줍니다. OnDelete 요소는 Customer를 삭제할 때 특정 Customer와 관련 있고 ObjectContext에 로드된 모든 Order가 삭제됨을 나타냅니다.

 <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)

CSDL(개념 스키마 정의 언어)의 Parameter 요소는 FunctionImport 요소 또는 Function 요소의 자식일 수 있습니다.

FunctionImport 요소 적용

FunctionImport 요소의 자식인 Parameter 요소를 사용하여 CSDL로 선언된 함수 가져오기에 대한 입력/출력 매개 변수를 정의할 수 있습니다.

Parameter 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개 허용)
  • Annotation 요소(요소 0개 이상 허용)

적용 가능한 특성

다음 표에서는 Parameter 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 매개 변수의 이름입니다.
Type 매개 변수 유형입니다. 값이 EDMSimpleType 또는 모델 범위에 포함되는 복합 형식이어야 합니다.
모드 아니요 매개 변수가 입력인지, 출력인지, 아니면 입력/출력 매개 변수인지에 따라 In, Out 또는 InOut입니다.
MaxLength 아니요 매개 변수의 최대 허용 길이입니다.
정밀도 아니요 매개 변수의 자릿수입니다.
확장 아니요 매개 변수의 소수 자릿수입니다.
SRID 아니요 공간 시스템 참조 식별자입니다. 공간 형식의 매개 변수에만 유효합니다. 자세한 내용은 SRIDSRID(SQL Server)를 참조하세요.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Parameter 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 Parameter 자식 요소가 한 개 있는 FunctionImport 요소를 보여 줍니다. 함수는 하나의 입력 매개 변수를 받아들이고 엔터티 형식의 컬렉션을 반환합니다.

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

 

Function 요소 적용

Function 요소의 자식인 Parameter 요소는 개념적 모델에서 정의되거나 선언된 함수에 대한 매개 변수를 정의합니다.

Parameter 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • CollectionType(요소 0개 또는 1개)
  • ReferenceType(요소 0개 또는 1개)
  • RowType(요소 0개 또는 1개)

참고 항목

CollectionType, ReferenceType 또는 RowType 요소 중 하나만 Property 요소의 자식 요소가 될 수 있습니다.

 

  • Annotation 요소(요소 0개 이상 허용)

참고 항목

Annotation 요소는 다른 모든 자식 요소 뒤에 와야 합니다. Annotation 요소는 CSDL v2 이상에서만 허용됩니다.

 

적용 가능한 특성

다음 표에서는 Parameter 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 매개 변수의 이름입니다.
Type 아니요 매개 변수 유형입니다. 매개 변수는 다음 형식 또는 이러한 형식의 컬렉션일 수 있습니다.
EdmSimpleType
엔터티 형식(entity type)
복합 형식
행 형식
참조 형식(reference type)
Nullable 아니요 속성에 null 값을 포함할 수 있는지 여부에 따라 True(기본값) 또는 False입니다.
DefaultValue 아니요 속성의 기본값입니다.
MaxLength 아니요 속성 값의 최대 길이입니다.
FixedLength 아니요 속성 값이 고정 길이 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
정밀도 아니요 속성 값의 전체 자릿수입니다.
확장 아니요 속성 값의 소수 자릿수입니다.
SRID 아니요 공간 시스템 참조 식별자입니다. 공간 형식의 속성에만 유효합니다. 자세한 내용은 SRIDSRID(SQL Server)를 참조하세요.
Unicode 아니요 속성 값이 유니코드 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
데이터 정렬 아니요 데이터 소스에 사용될 데이터 정렬 순서를 지정하는 문자열입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Parameter 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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)

CSDL(개념 스키마 정의 언어)의 Principal 요소는 참조 제약 조건의 주 끝을 정의하는 ReferentialConstraint 요소의 자식 요소입니다. ReferentialConstraint 요소는 관계 데이터베이스의 참조 무결성 제약 조건과 유사한 기능을 정의합니다. 데이터베이스 테이블의 열에서 다른 테이블의 기본 키를 참조하는 방식과 동일하게 엔터티 형식의 속성은 다른 엔터티 형식의 엔터티 키를 참조할 수 있습니다. 참조되는 엔터티 형식을 제약 조건의 ‘주 끝’이라고 합니다. 주 끝을 참조하는 엔터티 형식은 제약 조건의 ‘종속 끝’이라고 합니다. PropertyRef 요소를 사용하면 종속 끝에서 참조하는 키를 지정할 수 있습니다.

Principal 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • PropertyRef(요소 1개 이상)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 Principal 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
역할 연결의 주 끝에 있는 엔터티 형식의 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Principal 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 PublishedBy 연결 정의의 일부인 ReferentialConstraint 요소를 보여 줍니다. 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)

CSDL(개념 스키마 정의 언어)의 Property 요소는 EntityType 요소, ComplexType 요소 또는 RowType 요소의 자식일 수 있습니다.

EntityType 및 ComplexType 요소 적용

Property요소(EntityType 또는 ComplexType 요소의 자식 요소)는 엔터티 형식 인스턴스 또는 복합 형식 인스턴스에 포함될 데이터의 모양과 특징을 정의합니다. 개념적 모델의 속성은 클래스에 정의된 속성과 유사합니다. 클래스의 속성이 클래스의 모양을 정의하고 개체에 대한 정보를 전달하는 것과 동일한 방식으로, 개념적 모델의 속성은 엔터티 형식의 모양을 정의하고 엔터티 형식 인스턴스에 대한 정보를 전달합니다.

Property 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation 요소(요소 0개 또는 1개 허용)
  • Annotation 요소(요소 0개 이상 허용)

다음 패싯을 Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode 등의 Property 요소에 적용할 수 있습니다. 패싯은 속성 값이 데이터 저장소에 저장된 방식에 대한 정보를 제공하는 XML 특성입니다.

참고 항목

패싯은 EDMSimpleType 형식 속성에만 적용할 수 있습니다.

 

적용 가능한 특성

다음 표에서는 Property 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 속성의 이름입니다.
Type 속성 값의 형식입니다. 속성 값 형식은 모델 범위 내에 있는 EDMSimpleType 또는 복합 형식(정규화된 이름으로 표시)이어야 합니다.
Nullable 아니요 속성이 null 값을 가질 수 있는지 여부에 따라 True(기본값) 또는 False입니다.
[!NOTE]
> CSDL v1의 복합 형식 속성에는 Nullable="False"가 있어야 합니다.
DefaultValue 아니요 속성의 기본값입니다.
MaxLength 아니요 속성 값의 최대 길이입니다.
FixedLength 아니요 속성 값이 고정 길이 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
정밀도 아니요 속성 값의 전체 자릿수입니다.
확장 아니요 속성 값의 소수 자릿수입니다.
SRID 아니요 공간 시스템 참조 식별자입니다. 공간 형식의 속성에만 유효합니다. 자세한 내용은 SRIDSRID(SQL Server)를 참조하세요.
Unicode 아니요 속성 값이 유니코드 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
데이터 정렬 아니요 데이터 소스에 사용될 데이터 정렬 순서를 지정하는 문자열입니다.
ConcurrencyMode 아니요 없음(기본값) 또는 고정입니다. 값이 Fixed로 설정된 경우 속성 값이 낙관적 동시성 검사에 사용됩니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Property 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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 요소 적용

Property요소(RowType 요소의 자식 요소)는 모델 정의 함수로 전달되거나 모델 정의 함수에서 반환될 수 있는 데이터의 모양과 특징을 정의합니다.  

Property 요소에는 다음과 같은 자식 요소가 정확히 한 개 있을 수 있습니다.

  • CollectionType
  • ReferenceType
  • RowType

Property 요소에는 원하는 수만큼의 자식 Annotation 요소가 있을 수 있습니다.

참고 항목

Annotation 요소는 CSDL v2 이상에서만 허용됩니다.

 

적용 가능한 특성

다음 표에서는 Property 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 속성의 이름입니다.
Type 속성 값의 형식입니다.
Nullable 아니요 속성이 null 값을 가질 수 있는지 여부에 따라 True(기본값) 또는 False입니다.
[!NOTE]
> CSDL v1의 복합 형식 속성에는 Nullable="False"가 있어야 합니다.
DefaultValue 아니요 속성의 기본값입니다.
MaxLength 아니요 속성 값의 최대 길이입니다.
FixedLength 아니요 속성 값이 고정 길이 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
정밀도 아니요 속성 값의 전체 자릿수입니다.
확장 아니요 속성 값의 소수 자릿수입니다.
SRID 아니요 공간 시스템 참조 식별자입니다. 공간 형식의 속성에만 유효합니다. 자세한 내용은 SRIDSRID(SQL Server)를 참조하세요.
Unicode 아니요 속성 값이 유니코드 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
데이터 정렬 아니요 데이터 소스에 사용될 데이터 정렬 순서를 지정하는 문자열입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Property 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 모델 정의 함수에 대한 반환 형식의 모양을 정의하는 데 사용되는 Property 요소를 보여 줍니다.

 <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 요소는 엔터티 형식의 속성을 참조하여 해당 속성이 다음 역할 중 하나를 수행함을 나타냅니다.

  • 엔터티 키(ID를 확인하는 엔터티 형식의 속성 또는 속성 집합)의 일부분. 하나 이상의 PropertyRef 요소를 사용하여 엔터티 키를 정의할 수 있습니다.
  • 참조 제약 조건의 종속 또는 주 끝.

PropertyRef 요소에는 Annotation 요소(0개 이상)만 자식 요소로 있을 수 있습니다.

참고 항목

Annotation 요소는 CSDL v2 이상에서만 허용됩니다.

 

적용 가능한 특성

다음 표에서는 PropertyRef 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 참조된 속성의 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 PropertyRef 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 엔터티 형식(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(Function)
  • 매개 변수
  • CollectionType

ReferenceType 요소는 함수에 대한 매개 변수 또는 반환 형식을 정의할 때 사용됩니다.

ReferenceType 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 ReferenceType 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
Type 참조되는 엔터티 형식의 이름입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 ReferenceType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 Person 엔터티 형식에 대한 참조를 받아들이는 모델 정의 함수의 Parameter 요소에서 자식으로 사용되는 ReferenceType 요소를 보여 줍니다.

 <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 요소에서 자식으로 사용되는 ReferenceType 요소를 보여 줍니다.

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

 

 

ReferentialConstraint 요소(CSDL)

CSDL(개념 스키마 정의 언어)의 ReferentialConstraint 요소는 관계 데이터베이스의 참조 무결성 제약 조건과 유사한 기능을 정의합니다. 데이터베이스 테이블의 열에서 다른 테이블의 기본 키를 참조하는 방식과 동일하게 엔터티 형식의 속성은 다른 엔터티 형식의 엔터티 키를 참조할 수 있습니다. 참조되는 엔터티 형식을 제약 조건의 ‘주 끝’이라고 합니다. 주 끝을 참조하는 엔터티 형식은 제약 조건의 ‘종속 끝’이라고 합니다.

하나의 엔터티 형식에서 노출되는 외래 키가 다른 엔터티 형식의 속성을 참조하는 경우 ReferentialConstraint 요소가 두 엔터티 형식 간의 연결을 정의합니다. ReferentialConstraint 요소에서 두 엔터티 형식이 관련되는 방법에 대한 정보를 제공하므로 해당 AssociationSetMapping 요소가 MSL(매핑 사양 언어)에 필요하지는 않습니다. 노출된 외래 키가 없는 두 엔터티 형식 간의 연결에는 해당 AssociationSetMapping 요소가 있어야 연결 정보를 데이터 원본에 매핑할 수 있습니다.

엔터티 형식에서 외래 키가 노출되지 않은 경우 ReferentialConstraint 요소는 엔터티 형식과 다른 엔터티 형식 간의 기본 키 대 기본 키 제약 조건만 정의할 수 있습니다.

ReferentialConstraint 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Principal(요소 정확히 1개)
  • Dependent(요소 정확히 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

ReferentialConstraint 요소에는 주석 특성(사용자 지정 XML 특성)이 원하는 수만큼 포함될 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

예시

다음 예제에서는 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)

CSDL(개념 스키마 정의 언어)의 ReturnType 요소는 Function 요소에 정의된 함수에 대한 반환 형식을 지정합니다. 함수 반환 형식은 ReturnType 특성을 사용하여 지정할 수도 있습니다.

반환 형식은 EdmSimpleType, 엔터티 형식, 복합 형식, 행 형식, 참조 형식 또는 이러한 형식 중 하나의 컬렉션일 수 있습니다.

함수의 반환 형식은 ReturnType(Function) 요소의 Type 특성이나 다음 자식 요소 중 하나를 사용하여 지정할 수 있습니다.

  • CollectionType
  • ReferenceType
  • RowType

참고 항목

모델에서는 함수 반환 형식을 ReturnType(Function) 요소의 Type 특성과 자식 요소 중 하나를 사용하여 지정하는지 확인하지 않습니다.

 

적용 가능한 특성

다음 표에서는 ReturnType(Function) 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
ReturnType 아니요 함수에서 반환하는 형식입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 ReturnType(Function) 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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)

CSDL(개념 스키마 정의 언어)의 ReturnType(FunctionImport) 요소는 Function 요소에 정의된 함수의 반환 형식을 지정합니다. 함수 반환 형식은 ReturnType 특성을 사용하여 지정할 수도 있습니다.

반환 형식은 엔터티 형식, 복합 형식 또는 EdmSimpleType의 컬렉션일 수 있습니다.

함수의 반환 형식은 ReturnType(FunctionImport) 요소의 Type 특성으로 지정됩니다.

적용 가능한 특성

다음 표에서는 ReturnType(FunctionImport) 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
Type 아니요 함수에서 반환하는 형식입니다. 값은 ComplexType, EntityType 또는 EDMSimpleType의 컬렉션이어야 합니다.
EntitySet 아니요 함수에서 엔터티 형식의 컬렉션을 반환하는 경우 FunctionImport 값은 컬렉션이 속한 엔터티 집합이어야 합니다. 그렇지 않은 경우 EntitySet 특성을 사용하면 안 됩니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 ReturnType(FunctionImport) 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 책과 출판사를 반환하는 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(Function)

RowType 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Property(1개 이상)
  • Annotation 요소(0개 이상)

적용 가능한 특성

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 RowType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

예시

다음 예제에서는 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>

스키마 요소(CSDL)

Schema 요소는 개념적 모델 정의의 루트 요소입니다. 이 요소에는 개념적 모델을 구성하는 개체, 함수 및 컨테이너에 대한 정의가 포함되어 있습니다.

Schema 요소에는 다음 자식 요소가 0개 이상 포함될 수 있습니다.

  • 사용
  • EntityContainer
  • EntityType
  • EnumType
  • Association
  • ComplexType
  • 함수

Schema 요소에는 Annotation 요소가 0개 또는 1개 포함될 수 있습니다.

참고 항목

Function 요소 및 Annotation 요소는 CSDL v2 이상에서만 허용됩니다.

 

Schema 요소는 Namespace 특성을 사용하여 개념적 모델에서 엔터티 형식, 복합 형식 및 연결 개체에 대한 네임스페이스를 정의합니다. 네임스페이스 내에서 두 개체의 이름이 서로 같을 수 없습니다. 네임스페이스는 여러 Schema 요소 및 여러 .csdl 파일에 걸쳐 있을 수 있습니다.

개념적 모델 네임스페이스는 Schema 요소의 XML 네임스페이스와 다릅니다. Namespace 특성에 의해 정의되는 개념적 모델 네임스페이스는 엔터티 형식, 복합 형식 및 연결 형식에 대한 논리적 컨테이너입니다. xmlns 특성이 나타내는 Schema 요소의 XML 네임스페이스는 Schema 요소의 자식 요소 및 특성에 대한 기본 네임스페이스입니다. https://schemas.microsoft.com/ado/YYYY/MM/edm 형식(여기서 YYYY와 MM은 각각 연도와 월을 나타냄)의 XML 네임스페이스가 CSDL용으로 예약됩니다. 사용자 지정 요소 및 특성은 이러한 형식의 네임스페이스에 있을 수 없습니다.

적용 가능한 특성

다음 표에서는 Schema 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
네임스페이스 개념적 모델의 네임스페이스입니다. Namespace 특성 값을 사용하여 형식의 정규화된 이름을 만들 수 있습니다. 예를 들어, Customer라는 EntityType이 Simple.Example.Model 네임스페이스에 있는 경우 EntityType의 정규화된 이름은 SimpleExampleModel.Customer입니다.
다음 문자열은 System, Transient 또는Edm 등의 Namespace 특성 값으로 사용할 수 없습니다. Namespace 특성 값은 SSDL 스키마 요소에 있는 Namespace 특성 값과 같을 수 없습니다.
Alias 아니요 네임스페이스 이름 대신 사용되는 식별자입니다. 예를 들어, Customer라는 EntityType이 Simple.Example.Model 네임스페이스에 있고 Alias 특성 값이 Model인 경우 Model.Customer를 EntityType의 정규화된 이름으로 사용할 수 있습니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Schema 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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 요소는 다음과 같은 자식 요소를 나열된 순서대로 포함할 수 있습니다.

  • Documentation(요소 0개 또는 1개)
  • Annotation 요소(요소 0개 이상)

적용 가능한 특성

다음 표에서는 TypeRef 요소에 적용할 수 있는 특성을 설명합니다. DefaultValue, MaxLength, FixedLength, Precision, Scale, UnicodeCollation 특성은 EDMSimpleTypes에만 적용할 수 있습니다.

특성 이름 필수
Type 아니요 참조되는 엔터티 형식의 이름입니다.
Nullable 아니요 속성이 null 값을 가질 수 있는지 여부에 따라 True(기본값) 또는 False입니다.
[!NOTE]
> CSDL v1의 복합 형식 속성에는 Nullable="False"가 있어야 합니다.
DefaultValue 아니요 속성의 기본값입니다.
MaxLength 아니요 속성 값의 최대 길이입니다.
FixedLength 아니요 속성 값이 고정 길이 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
정밀도 아니요 속성 값의 전체 자릿수입니다.
확장 아니요 속성 값의 소수 자릿수입니다.
SRID 아니요 공간 시스템 참조 식별자입니다. 공간 형식의 속성에만 유효합니다. 자세한 내용은 SRIDSRID(SQL Server)를 참조하세요.
Unicode 아니요 속성 값이 유니코드 문자열로 저장되는지 여부에 따라 True 또는 False입니다.
데이터 정렬 아니요 데이터 소스에 사용될 데이터 정렬 순서를 지정하는 문자열입니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 CollectionType 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 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>

 

 

요소 사용(CSDL)

CSDL(개념 스키마 정의 언어)의 Using 요소는 다른 네임스페이스에 존재하는 개념적 모델의 내용을 가져옵니다. Namespace 특성 값을 설정하면 다른 개념적 모델에 정의된 엔터티 형식, 복합 형식 및 연결 형식을 참조할 수 있습니다. 두 개 이상의 Using 요소가 Schema 요소의 자식일 수 있습니다.

참고 항목

CSDL의 Using 요소는 프로그래밍 언어의 using 문과 정확하게 똑같이 작동하지는 않습니다. 프로그래밍 언어의 using 문을 사용하여 네임스페이스를 가져오면 원래 네임스페이스의 개체에 영향을 주지 않습니다. CSDL의 가져온 네임스페이스에는 원래 네임스페이스의 엔터티 형식에서 파생된 엔터티 형식이 포함될 수 있습니다. 이는 원래 네임스페이스에 선언된 엔터티 집합에 영향을 줄 수 있습니다.

 

Using 요소에는 다음 자식 요소가 있을 수 있습니다.

  • Documentation(요소 0개 또는 1개 허용)
  • Annotation 요소(요소 0개 이상 허용)

적용 가능한 특성

다음 표에서는 Using 요소에 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
네임스페이스 가져온 네임스페이스의 이름입니다.
Alias 네임스페이스 이름 대신 사용되는 식별자입니다. 이 특성은 필요하지만 개체 이름을 정규화하기 위해 네임스페이스 이름 대신 사용해야 할 필요는 없습니다.

 

참고 항목

주석 특성(사용자 지정 XML 특성)을 원하는 수만큼 Using 요소에 적용할 수 있습니다. 그러나 사용자 지정 특성은 CSDL에 예약된 XML 네임스페이스에 속할 수 없습니다. 두 사용자 지정 특성의 정규화된 이름은 서로 같을 수 없습니다.

 

예시

다음 예제에서는 다른 곳에 정의된 네임스페이스를 가져오는 데 사용되는 Using 요소에 대해 설명합니다. 표시된 Schema 요소의 네임스페이스는 BooksModel입니다. PublisherEntityTypeAddress 속성은 Using 요소를 사용하여 가져온 ExtendedBooksModel 네임스페이스에 정의된 복합 형식입니다.

 <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 구조를 가져야 함은 물론 다음 조건을 충족해야 합니다.

  • 주석 특성은 CSDL용으로 예약된 XML 네임스페이스에 속하지 않아야 합니다.
  • 두 개 이상의 주석 특성을 제공된 CSDL 요소에 적용할 수 있습니다.
  • 두 주석 특성의 정규화된 이름은 서로 같을 수 없습니다.

주석 특성을 사용하여 개념적 모델의 요소에 대한 추가 메타데이터를 제공할 수 있습니다. Annotation 요소에 포함된 메타데이터는 System.Data.Metadata.Edm 네임스페이스의 클래스를 사용하여 런타임에 액세스할 수 있습니다.

예시

다음 예제에서는 주석 특성(CustomAttribute)이 포함된 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>

 

다음 코드에서는 주석 특성의 메타데이터를 검색하여 콘솔에 씁니다.

 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;

 

 

Annotation 요소(CSDL)

CSDL(개념 스키마 정의 언어)의 Annotation 요소는 개념적 모델의 사용자 지정 XML 요소입니다. Annotation 요소는 올바른 XML 구조를 가져야 함은 물론 다음 조건을 충족해야 합니다.

  • Annotation 요소는 CSDL용으로 예약된 XML 네임스페이스에 속하지 않아야 합니다.
  • 두 개 이상의 Annotation 요소가 제공된 CSDL 요소의 자식이 될 수 있습니다.
  • 두 Annotation 요소의 정규화된 이름은 서로 같을 수 없습니다.
  • Annotation 요소는 제공된 CSDL 요소의 다른 모든 자식 요소 뒤에 나타나야 합니다.

Annotation 요소를 사용하여 개념적 모델의 요소에 대한 추가 메타데이터를 제공할 수 있습니다. .NET Framework 버전 4부터 Annotation 요소에 포함된 메타데이터는 System.Data.Metadata.Edm 네임스페이스의 클래스를 사용하여 런타임에 액세스할 수 있습니다.

예시

다음 예제에서는 Annotation 요소(CustomElement)가 포함된 EntityType 요소를 보여 줍니다. 다음 예제에서는 엔터티 형식 요소에 적용된 주석 특성도 보여 줍니다.

 <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는 저장소 또는 호스팅 환경에서 지원되는 기본 데이터 형식의 프록시입니다.

다음 표에서는 CSDL에서 지원되는 기본 데이터 형식을 보여 줍니다. 또한 표에는 각 EDMSimpleType에 적용할 수 있는 패싯이 나열되어 있습니다.

EDMSimpleType 설명 적용 가능한 패싯
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 Nullable, 기본값, SRID
Edm.GeographyPoint Nullable, 기본값, SRID
Edm.GeographyLineString Nullable, 기본값, SRID
Edm.GeographyPolygon Nullable, 기본값, SRID
Edm.GeographyMultiPoint Nullable, 기본값, SRID
Edm.GeographyMultiLineString Nullable, 기본값, SRID
Edm.GeographyMultiPolygon Nullable, 기본값, SRID
Edm.GeographyCollection Nullable, 기본값, SRID
Edm.Geometry Nullable, 기본값, SRID
Edm.GeometryPoint Nullable, 기본값, SRID
Edm.GeometryLineString Nullable, 기본값, SRID
Edm.GeometryPolygon Nullable, 기본값, SRID
Edm.GeometryMultiPoint Nullable, 기본값, SRID
Edm.GeometryMultiLineString Nullable, 기본값, SRID
Edm.GeometryMultiPolygon Nullable, 기본값, SRID
Edm.GeometryCollection Nullable, 기본값, SRID

패싯(CSDL)

CSDL(개념 스키마 정의 언어)의 패싯은 엔터티 형식 및 복합 형식 속성에 대한 제약 조건을 나타냅니다. 패싯은 다음 CSDL 요소에서 XML 특성으로 나타납니다.

  • 속성
  • TypeRef
  • 매개 변수

다음 표에서는 CSDL에서 지원되는 패싯에 대해 설명합니다. 모든 패싯은 선택적 요소입니다. 아래에 나와 있는 일부 패싯은 개념적 모델에서 데이터베이스를 생성할 때 Entity Framework에서 사용합니다.

참고 항목

개념적 모델의 데이터 형식에 대한 자세한 내용은 CSDL(개념적 모델 형식)을 참조하세요.

패싯 설명 적용 대상 데이터베이스 생성에 사용됩니다. 런타임에서 사용됩니다.
데이터 정렬 속성 값에 대한 비교 및 순서 지정 작업을 수행할 때 사용할 데이터 정렬 순서 또는 정렬 순서를 지정합니다. Edm.String 아니요
ConcurrencyMode 속성 값을 낙관적 동시성 검사에 사용하도록 지정합니다. 모든 EDMSimpleType 속성
기본값 인스턴스화 시 값이 제공되지 않는 경우 속성의 기본값을 지정합니다. 모든 EDMSimpleType 속성
FixedLength 속성 값 길이가 다양할 수 있는지 여부를 지정합니다. Edm.Binary, Edm.String 아니요
MaxLength 속성 값의 최대 길이를 지정합니다. Edm.Binary, Edm.String 아니요
Nullable 속성 값이 null일 수 있는지 여부를 지정합니다. 모든 EDMSimpleType 속성
정밀도 형식이 Decimal인 속성의 경우 속성 값에 포함할 수 있는 자릿수를 지정합니다. 형식이 Time, DateTimeDateTimeOffset인 속성의 경우 속성 값의 초 소수 부분 자릿수를 지정합니다. Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time 아니요
확장 속성 값에 대한 소수점 오른쪽의 자릿수를 지정합니다. Edm.Decimal 아니요
SRID 공간 시스템 참조 시스템 ID를 지정합니다. 자세한 내용은 SRIDSRID(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
Unicode 속성 값을 유니코드로 저장할지 여부를 나타냅니다. Edm.String

참고 항목

개념적 모델에서 데이터베이스를 생성할 때 데이터베이스 생성 마법사에서는 https://schemas.microsoft.com/ado/2009/02/edm/annotation 네임스페이스에 있는 경우 Property 요소의 StoreGeneratedPattern 특성 값을 인식합니다. 지원되는 특성 값은 IdentityComputed입니다. Identity 값은 데이터베이스에서 생성된 ID 값을 사용하여 데이터베이스 열을 만듭니다. Computed 값은 데이터베이스에서 계산된 값을 사용하여 열을 만듭니다.

예시

다음 예제에서는 엔터티 형식의 속성에 적용된 패싯을 보여 줍니다.

 <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>