Спецификация CSDL

Примечание.

CSDL версии 1 не поддерживается, обновите до версии 3.

Язык CSDL — это язык на основе XML, описывающий сущности, связи и функции, составляющие концептуальную модель управляемого данными приложения. Эту концептуальную модель можно использовать в Entity Framework или службы данных WCF. Метаданные, описанные в 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 Designer хранятся концептуальные сведения о модели в edmx-файле во время разработки. Во время сборки конструктор EF использует сведения в edmx-файле для создания CSDL-файла, необходимого Entity Framework во время выполнения.

Версии языка CSDL различаются по пространствам имен XML.

Версия CSDL Пространство имен XML
CSDL версии 1 https://schemas.microsoft.com/ado/2006/04/edm
CSDL версии 2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL версии 3 https://schemas.microsoft.com/ado/2009/11/edm

Элемент Association (CSDL)

Элемент Association определяет связь между двумя типами сущностей. Ассоциация должна указывать типы сущностей, которые участвуют в связи, и возможное количество типов сущностей на каждом конце связи, которое называется кратностью. Кратность конца связи может иметь значение одного (1), ноль или один (0.1) или многие (*). Эта информация указана в двух дочерних элементах end.

К экземплярам типов сущностей в одном элементе ассоциации можно обращаться посредством свойств навигации или внешних ключей, если они предоставлены в типе сущности.

В приложении экземпляр ассоциации представляет конкретную ассоциацию между экземплярами типов сущностей. Экземпляры ассоциации логически сгруппированы в набор ассоциаций.

Элемент Association может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • End (ровно 2 элемента)
  • ReferentialConstraint (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу Association .

Имя атрибута Обязательно Значение
Имя Да Имя ассоциации.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Association . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент Association, определяющий связь CustomerOrders, когда внешние ключи не были предоставлены в типах сущностей Customer и Order. Значения кратности для каждой связи указывают на то, что многие заказы могут быть связаны с клиентом, но только один клиент может быть связан с заказом. Кроме того, элемент 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>

 

В следующем примере показан элемент Association, определяющий связь CustomerOrders, когда внешние ключи были предоставлены в типах сущностей Customer и Order. При использовании внешних ключей связь между сущностями управляется элементом 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)

Элемент AssociationSet в языке определения концептуальной схемы (CSDL) — это логический контейнер для экземпляров ассоциаций одного типа. Набор ассоциаций предоставляет определение группы экземпляров ассоциаций, чтобы их можно было сопоставить с источником данных.  

Элемент AssociationSet может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один разрешенный элемент)
  • Конец (ровно два элемента, необходимых)
  • Элементы заметки (ноль или больше разрешенных элементов)

Атрибут Association указывает тип ассоциации, которая содержит набор ассоциаций. Наборы сущностей, составляющие концы набора связей, указываются с двумя дочерними элементами end .

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу AssociationSet .

Имя атрибута Обязательно Значение
Имя Да Имя набора сущностей. Значение атрибута Name не может совпадать со значением атрибута Association.
Ассоциация Да Полное имя ассоциации, экземпляры которой содержатся в наборе ассоциаций. Ассоциация должна находиться в том же пространстве имен, что и набор ассоциаций.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу AssociationSet . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EntityContainer с двумя элементами AssociationSet:

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

Элемент CollectionType в языке определения концептуальной схемы (CSDL) указывает, что параметр функции или возвращаемый тип функции является коллекцией. Элемент CollectionType может быть дочерним элементом элемента Parameter или элементом ReturnType (Function). Тип коллекции можно указать с помощью атрибута Type или одного из следующих дочерних элементов:

  • CollectionType
  • Тип ссылки
  • RowType
  • TypeRef

Примечание.

Модель не проверяет, указан ли тип коллекции как атрибутом Type , так и дочерним элементом.

 

Применимые атрибуты

В следующей таблице описаны атрибуты, которые можно применить к элементу CollectionType . Обратите внимание, что атрибуты DefaultValue, MaxLength, FixedLength, Precision, Scale, Юникод и Сортировка применимы только к коллекциям EDMSimpleTypes.

Имя атрибута Обязательно Значение
Тип No Тип коллекции.
Допускает значения NULL No True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null.
[!ПРИМЕЧАНИЕ]
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа.
DefaultValue No Значение по умолчанию для свойства.
MaxLength No Максимальная длина значения свойства.
FixedLength No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки фиксированной длины.
Точность No Точность значения свойства.
Масштабировать No Масштаб значения свойства.
SRID No Идентификатор ссылки на пространственные системы. Допустимо только для свойств пространственных типов.   Дополнительные сведения см. в статье SRID и SRID (SQL Server)
Юникод No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки Юникода.
Параметры сортировки 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, хотя каждое скалярное свойство сложного типа может быть установлено в это значение.

Элемент ComplexType может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Свойство (ноль или несколько элементов)
  • Элементы заметки (ноль или больше элементов)

В таблице ниже описаны атрибуты, которые можно применить к элементу ComplexType .

Имя атрибута Обязательно Значение
Имя. Да Имя сложного типа. Имя сложного типа не может совпадать с именем другого сложного типа, типа сущности или сопоставления, которые находятся в области модели.
BaseType No Имя другого сложного типа, который является базовым типом определяемого сложного типа.
[!ПРИМЕЧАНИЕ]
> Этот атрибут неприменимо в CSDL версии 1. В этой версии не поддерживается наследование для сложных типов.
Краткие сведения No Значение True или False (значение по умолчанию) в зависимости от того, является ли сложный тип абстрактным.
[!ПРИМЕЧАНИЕ]
> Этот атрибут неприменимо в CSDL версии 1. Сложные типы в этой версии не могут быть абстрактными типами.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые 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 (выше) как свойство типа сущности, необходимо объявить тип свойства в определении типа сущности. В следующем примере показано свойство 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)

Элемент DefineingExpression в языке определения концептуальной схемы (CSDL) содержит выражение Entity SQL, определяющее функцию в концептуальной модели.  

Примечание.

В целях проверки элемент DefiningExpression может содержать произвольное содержимое. Однако Entity Framework вызовет исключение во время выполнения, если элемент DefiningExpression не содержит допустимый объект Entity SQL.

 

Применимые атрибуты

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу DefiningExpression . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

Пример

В следующем примере для определения функции, возвращающей количество лет после публикации книги, используется элемент DefineingExpression . Содержимое элемента 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) является дочерним элементом элемента ReferentialConstraint и определяет зависимый конец ссылочного ограничения. Элемент ReferentialConstraint определяет функциональные возможности, аналогичные ограничению целостности ссылки в реляционной базе данных. Свойство (или свойства) типа сущности могут ссылаться на ключ сущности в другом типе сущности также, как столбец (или столбцы) в таблице базы данных могут ссылаться на первичный ключ другой таблицы. Тип сущности, на который ссылается ссылка, называется основным концом ограничения. Тип сущности, ссылающийся на конец субъекта, называется зависимым концом ограничения. Элементы PropertyRef используются для указания ключей, ссылающихся на конец субъекта.

Элемент Зависимый может содержать следующие дочерние элементы (в указанном порядке):

  • PropertyRef (один или несколько элементов)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В приведенной ниже таблице описаны атрибуты, которые можно применить к зависимому элементу.

Имя атрибута Обязательно Значение
Роль Да Имя типа сущности в зависимом элементе ассоциации.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Зависимый. Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент ReferentialConstraint , используемый в рамках определения ассоциации PublishedBy . Свойство PublisherId типа сущности Book составляет зависимый конец референтного ограничения.

 <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 в языке определения концептуальной схемы (CSDL) можно использовать для предоставления сведений об объекте, определенном в родительском элементе. В edmx-файле, когда элемент Documentation является дочерним элементом элемента, который отображается в качестве объекта в области конструктора EF (например, сущности, ассоциации или свойства), содержимое элемента "Документация" появится в окне свойств Visual Studio для объекта.

Элемент Documentation может содержать следующие дочерние элементы (в указанном порядке):

  • Сводка. Краткое описание родительского элемента. (ноль или один элемент)
  • LongDescription: обширное описание родительского элемента. (ноль или один элемент)
  • Элементы заметки. (ноль или больше элементов)

Применимые атрибуты

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Documentation . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

Пример

В следующем примере показан элемент Documentation в качестве дочернего элемента элемента EntityType. Если приведенный ниже фрагмент содержит содержимое CSDL-файла edmx, содержимое элементов Сводки и LongDescription будет отображаться в окне свойств Visual Studio при щелчке по типу Customer сущности.

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

Элемент End в языке определения концептуальной схемы (CSDL) может быть дочерним элементом элемента Association или элементом AssociationSet. В каждом случае роль элемента End отличается, а применимые атрибуты отличаются.

Элемент End как дочерний по отношению к элементу Association

Элемент End (как дочерний элемент элемента Association ) определяет тип сущности в одной части ассоциации и число экземпляров типов сущностей, которые могут существовать в этом конце ассоциации. Элементы ассоциации определяются при определении ассоциации; ассоциация должна иметь два элемента. К экземплярам типов сущности на одном элементе ассоциации можно осуществлять доступ с помощью свойств навигации или внешних ключей при условии, что они были предоставлены в типах сущности.  

Элемент End может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • OnDelete (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В следующей таблице описываются атрибуты, которые можно применять к элементу End , когда он является дочерним элементом элемента Association .

Имя атрибута Обязательно Значение
Тип Да Имя типа сущности на одном элементе ассоциации.
Роль No Имя для элемента ассоциации. Если имя не было предоставлено, будет использовано имя типа сущности на элементе ассоциации.
Кратность Да 1, 0.1 или * в зависимости от количества экземпляров типа сущности, которые могут находиться в конце связи.
1 указывает, что в конце связи существует ровно один экземпляр типа сущности.
0.1 указывает, что в конце связи существуют ноль или один экземпляр типа сущности.
* указывает, что в конце связи существуют ноль, один или несколько экземпляров типа сущности.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу End . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент Association, определяющий ассоциацию CustomerOrders. Значения кратности для каждой связи указывают на то, что многие заказы могут быть связаны с клиентом, но только один клиент может быть связан с заказом. Кроме того, элемент 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 версии 2 и более поздних версиях.

 

Применимые атрибуты

В следующей таблице описываются атрибуты, которые можно применять к элементу End , когда он является дочерним элементом элемента AssociationSet .

Имя атрибута Обязательно Значение
EntitySet Да Имя элемента EntitySet , определяющего один конец родительского элемента AssociationSet . Элемент EntitySet должен быть определен в том же контейнере сущностей, что и родительский элемент AssociationSet .
Роль No Имя элемента набора ассоциаций. Если атрибут Роли не используется, имя конца набора ассоциаций будет именем набора сущностей.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу End . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EntityContainer с двумя элементами AssociationSet, каждый из которых содержит два элемента 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 в языке определения концептуальной схемы (CSDL) — это логический контейнер для наборов сущностей, наборов ассоциаций и импорта функций. Контейнер сущностей концептуальной модели сопоставляется с контейнером сущности модели хранилища с помощью элемента EntityContainerMapping. Контейнер сущностей режима хранения описывает структуру базы данных: наборы сущностей описывают таблицы, наборы ассоциаций описывают ограничения внешних ключей, функции импорта описывают хранимые процедуры в базе данных.

Элемент EntityContainer может иметь ноль или один элемент Документации. Если элемент Documentation присутствует, он должен предшествовать всем элементам EntitySet, AssociationSet и FunctionImport.

Элемент EntityContainer может иметь ноль или более следующих дочерних элементов (в указанном порядке):

  • EntitySet
  • AssociationSet
  • FunctionImport
  • Элементы Annotation

Можно расширить элемент EntityContainer, чтобы включить содержимое другого EntityContainer, которое находится в одном пространстве имен. Чтобы включить содержимое другого объекта EntityContainer, в элемент EntityContainer, задайте значение атрибута Extends именем элемента EntityContainer, который требуется включить. Все дочерние элементы включенного элемента EntityContainer будут рассматриваться как дочерние элементы элемента EntityContainer, ссылающегося на объект EntityContainer.

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу Using .

Имя атрибута Обязательно Значение
Имя Да Имя контейнера сущностей.
Расширяет 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 .

Имя атрибута Обязательно Значение
Имя Да Имя набора сущностей.
EntityType Да Полное имя типа сущности, для которого набор сущностей содержит экземпляры.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу EntitySet . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EntityContainer с тремя элементами EntitySet :

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

Имя атрибута Обязательно Значение
Имя Да Имя типа сущности.
BaseType No Имя другого типа сущности, который является базовым типом определяемого типа сущности.
Краткие сведения No Значение True или False в зависимости от того, является ли тип сущности абстрактным типом.
OpenType No Значение True или False в зависимости от того, является ли тип сущности открытым типом сущности.
[!ПРИМЕЧАНИЕ]
>Атрибут OpenType применим только к типам сущностей, определенным в концептуальных моделях, используемых с ADO.NET службами данных.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу EntityType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EntityType с тремя элементами Property и двумя элементами NavigationProperty:

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

Имя атрибута Обязательно Значение
Имя Да Имя типа сущности.
IsFlags No True или False, в зависимости от того, можно ли использовать тип перечисления в качестве набора флагов. Значением по умолчанию является False..
Базовый тип No Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 или Edm.SByte , определяющий диапазон значений типа.   Базовый тип элементов перечисления по умолчанию — Edm.Int32..

 

Примечание.

Любое количество атрибутов заметки (настраиваемые атрибуты XML) может применяться к элементу EnumType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EnumType с тремя элементами Member :

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

 

 

Элемент Function (CSDL)

Элемент Function в языке определения концептуальной схемы (CSDL) используется для определения или объявления функций в концептуальной модели. Функция определяется с помощью элемента DefiningExpression.  

Элемент Function может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Параметр (ноль или несколько элементов)
  • ОпределениеExpression (ноль или один элемент)
  • ReturnType (Function) (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Возвращаемый тип функции должен быть указан с помощью элемента ReturnType (Function) или атрибута ReturnType (см. ниже), но не оба. Возвращаемым типом может быть EdmSimpleType, тип сущности, сложный тип, строковый тип, ссылочный тип или коллекция, которая включает один из этих типов.

Применимые атрибуты

В приведенной ниже таблице описаны атрибуты, которые можно применить к элементу Function .

Имя атрибута Обязательно Значение
Имя Да Имя функции.
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)

Элемент FunctionImport в языке определения концептуальной схемы (CSDL) представляет функцию, определенную в источнике данных, но доступную для объектов с помощью концептуальной модели. Например, элемент Function в модели хранения можно использовать для представления хранимой процедуры в базе данных. Элемент FunctionImport в концептуальной модели представляет соответствующую функцию в приложении Entity Framework и сопоставляется с функцией модели хранения с помощью элемента FunctionImportMapping . При вызове функции в приложении соответствующая хранимая процедура выполняется в базе данных.

Элемент FunctionImport может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один разрешенный элемент)
  • Параметр (ноль или более разрешенных элементов)
  • Элементы заметки (ноль или больше разрешенных элементов)
  • ReturnType (FunctionImport) (ноль или несколько разрешенных элементов)

Для каждого параметра, который принимает функция, необходимо определить один элемент Parameter .

Тип возвращаемого значения для функции должен быть указан с помощью элемента ReturnType (FunctionImport) или атрибута ReturnType (см. ниже), но не оба. Возвращаемое значение типа должно быть коллекцией EdmSimpleType, EntityType или ComplexType.

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу FunctionImport .

Имя атрибута Обязательно Значение
Имя Да Имя импортируемой функции.
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), имеющий ключ сущности, состоящий из двух свойств, имени и адреса.

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

Имя атрибута Обязательно Значение
Имя Да Имя элемента.
Value No Значение элемента. По умолчанию первый элемент имеет значение 0, а значение каждого последовательного перечислителя увеличивается на 1. Несколько членов с одинаковыми значениями могут существовать.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу FunctionImport . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EnumType с тремя элементами Member :

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

 

 

Элемент NavigationProperty определяет свойство навигации, которое предоставляет ссылку на другую часть ассоциации. В отличие от свойств, определенных элементом Property, свойства навигации не определяют форму и характеристики данных. Они предоставляют возможность навигации по ассоциации между двумя типами сущностей.

Обратите внимание, что свойства навигации являются необязательными для обоих типов сущностей, расположенных в конечных элементах ассоциации. Если свойство навигации было определено для типа сущности на одном конечном элементе ассоциации, то определять его для типа сущности на другом конечном элементе необязательно.

Тип данных, возвращаемый свойством навигации, определяется кратностью в удаленном элементе ассоциации. Например, предположим, что свойство навигации OrdersNavProp существует в типе сущности Customer и перемещается связь "один ко многим" между клиентом и заказом. Так как конец удаленной связи для свойства навигации имеет много кратности (*), его тип данных — это коллекция ( order). Аналогичным образом, если свойство навигации CustomerNavProp существует в типе сущности Order , его тип данных будет клиентом , так как умножение удаленного конца равно одному (1).

Элемент NavigationProperty может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу NavigationProperty .

Имя атрибута Обязательно Значение
Имя Да Имя свойства навигации.
Отношение Да Имя ассоциации, расположенной в пределах области модели.
ToRole Да Конечная точка ассоциации на которой заканчивается навигация. Значение атрибута ToRole должно совпадать со значением одного из атрибутов Role , определенных на одном из окончаний связи (определенных в элементе AssociationEnd).
FromRole Да Конечная точка ассоциации с которой начинается навигация. Значение атрибута 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)

Элемент OnDelete в языке определения концептуальной схемы (CSDL) определяет поведение, связанное с ассоциацией. Если атрибут Action имеет значение Cascade в одной части ассоциации, связанные типы сущностей в другом конце ассоциации удаляются при удалении типа сущности в первом конце. Если связь между двумя типами сущностей является связью первичного ключа к первичному ключу, то загруженный зависимый объект удаляется при удалении основного объекта в другой части ассоциации независимо от спецификации OnDelete .  

Примечание.

Элемент OnDelete влияет только на поведение среды выполнения приложения; он не влияет на поведение в источнике данных. Поведение, определенное в источнике данных, должно совпадать с поведением, определенным для приложения.

 

Элемент OnDelete может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу OnDelete .

Имя атрибута Обязательно Значение
Действие Да Каскад или нет. Если Каскад, зависимые типы сущностей будут удалены при удалении типа основной сущности. Если нет, зависимые типы сущностей не будут удалены при удалении основного типа сущности.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Association . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент Association, определяющий ассоциацию CustomerOrders. Элемент 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 в языке определения концептуальной схемы (CSDL) может быть дочерним элементом элемента FunctionImport или элементом Function.

Приложение, использующее элемент FunctionImport

Элемент Parameter (в качестве дочернего элемента FunctionImport) используется для определения входных и выходных параметров для импорта функций, объявленных в CSDL.

Элемент Parameter может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один разрешенный элемент)
  • Элементы заметки (ноль или больше разрешенных элементов)

Применимые атрибуты

В следующей таблице описаны атрибуты, которые можно применить к элементу Parameter .

Имя атрибута Обязательно Значение
Имя Да Имя параметра.
Тип Да Тип параметра. Значение должно представлять собой EDMSimpleType или сложный тип в рамках модели.
Режим No In, Out или InOut в зависимости от того, является ли параметр входным, выходным или выходным параметром.
MaxLength No Максимально допустимая длина параметра.
Точность No Точность параметра.
Масштабировать No Масштаб параметра.
SRID No Идентификатор ссылки на пространственные системы. Допустимо только для параметров пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server).

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Parameter . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент FunctionImport с одним дочерним элементом Parameter. Функция принимает один входной параметр и возвращает коллекцию типов сущностей.

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

 

Приложение, использующее элемент Function

Элемент Parameter (как дочерний элемент функции) определяет параметры для функций, определенных или объявленных в концептуальной модели.

Элемент Parameter может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • CollectionType (ноль или один элемент)
  • ReferenceType (ноль или один элемент)
  • RowType (ноль или один элемент)

Примечание.

Только один из элементов CollectionType, ReferenceType или RowType может быть дочерним элементом элемента Property.

 

  • Элементы заметки (ноль или больше разрешенных элементов)

Примечание.

Элементы Annotation должны следовать после всех остальных дочерних элементов. Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.

 

Применимые атрибуты

В следующей таблице описаны атрибуты, которые можно применить к элементу Parameter .

Имя атрибута Обязательно Значение
Имя Да Имя параметра.
Тип No Тип параметра. Параметр может быть любым из следующих типов (или коллекций этих типов):
EdmSimpleType
Тип сущности
сложный тип
Тип строки
ссылочный тип
Допускает значения NULL No True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение NULL .
DefaultValue No Значение по умолчанию для свойства.
MaxLength No Максимальная длина значения свойства.
FixedLength No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки фиксированной длины.
Точность No Точность значения свойства.
Масштабировать No Масштаб значения свойства.
SRID No Идентификатор ссылки на пространственные системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server).
Юникод No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки Юникода.
Параметры сортировки No Строка, указывающая порядок сортировки, используемый в источнике данных.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Parameter . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент Function, использующий один дочерний элемент Parameter для определения параметра функции.

 <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) является дочерним элементом элемента ReferentialConstraint, который определяет основной конец ссылочного ограничения. Элемент ReferentialConstraint определяет функциональные возможности, аналогичные ограничению целостности ссылки в реляционной базе данных. Свойство (или свойства) типа сущности могут ссылаться на ключ сущности в другом типе сущности также, как столбец (или столбцы) в таблице базы данных могут ссылаться на первичный ключ другой таблицы. Тип сущности, на который ссылается ссылка, называется основным концом ограничения. Тип сущности, ссылающийся на конец субъекта, называется зависимым концом ограничения. Элементы PropertyRef используются для указания ключей, на которые ссылается зависимый конец.

Элемент Principal может содержать следующие дочерние элементы (в указанном порядке):

  • PropertyRef (один или несколько элементов)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу Principal .

Имя атрибута Обязательно Значение
Роль Да Имя типа сущности в основном конце ассоциации.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Principal . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент ReferentialConstraint , который является частью определения ассоциации PublishedBy . Свойство Идентификатора типа сущности Publisher состоит из основного конца ссылочного ограничения.

 <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 в языке определения концептуальной схемы (CSDL) может быть дочерним элементом EntityType, элементом ComplexType или элементом RowType.

Применение элементов EntityType и ComplexType

Элементы свойств (как дочерние элементы EntityType или ComplexType) определяют форму и характеристики данных, которые будет содержать экземпляр типа сущности или экземпляр сложного типа. Свойства в концептуальной модели аналогичны свойствам, которые определены в классе. По такому же принципу, как свойства, относящиеся к классу, определяют форму класса и несут информацию об объектах, свойства в концептуальной модели определяют форму типа сущности и несут информацию об экземплярах типа сущности.

Элемент Property может содержать следующие дочерние элементы (в указанном порядке):

  • Элемент документации (ноль или один разрешенный элемент)
  • Элементы заметки (ноль или больше разрешенных элементов)

К элементу Property можно применять следующие аспекты: Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. Аспекты представляют собой атрибуты XML, которые предоставляют сведения о том, как значения свойств хранятся в хранилище данных.

Примечание.

Аспекты можно применять только к свойствам типа EDMSimpleType.

 

Применимые атрибуты

В следующей таблице описываются атрибуты, которые можно применить к элементу Property .

Имя атрибута Обязательно Значение
Имя Да Имя свойства.
Тип Да Тип значения свойства. Тип значения свойства должен представлять собой EDMSimpleType или сложный тип (указано в полном имени) в рамках модели.
Допускает значения NULL No True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null.
[!ПРИМЕЧАНИЕ]
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа.
DefaultValue No Значение по умолчанию для свойства.
MaxLength No Максимальная длина значения свойства.
FixedLength No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки фиксированной длины.
Точность No Точность значения свойства.
Масштабировать No Масштаб значения свойства.
SRID No Идентификатор ссылки на пространственные системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server).
Юникод No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки Юникода.
Параметры сортировки No Строка, указывающая порядок сортировки, используемый в источнике данных.
ConcurrencyMode No None (значение по умолчанию) или Fixed. Если задано значение Fixed, значение свойства будет использоваться при выполнении проверок оптимистичного параллелизма.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Property . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент EntityType с тремя элементами Property :

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

 

В следующем примере показан элемент ComplexType с пятью элементами Property:

 <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
  • Тип ссылки
  • RowType

Элемент Property может содержать любые дочерние элементы заметки.

Примечание.

Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.

 

Применимые атрибуты

В следующей таблице описываются атрибуты, которые можно применить к элементу Property .

Имя атрибута Обязательно Значение
Имя Да Имя свойства.
Тип Да Тип значения свойства.
Допускает значения NULL No True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null.
[!ПРИМЕЧАНИЕ]
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа.
DefaultValue No Значение по умолчанию для свойства.
MaxLength No Максимальная длина значения свойства.
FixedLength No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки фиксированной длины.
Точность No Точность значения свойства.
Масштабировать No Масштаб значения свойства.
SRID No Идентификатор ссылки на пространственные системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server).
Юникод No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки Юникода.
Параметры сортировки 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)

Элемент PropertyRef в языке определения концептуальной схемы (CSDL) ссылается на свойство типа сущности, указывающее, что свойство будет выполнять одну из следующих ролей:

  • Часть ключа сущности (является свойством или набором свойств типа сущности, которые определяют идентификатор). Для определения ключа сущности можно использовать один или несколько элементов PropertyRef .
  • Зависимый или основной конец справочного ограничения.

Элемент PropertyRef может содержать только элементы заметки (ноль или более) в качестве дочерних элементов.

Примечание.

Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.

 

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу PropertyRef .

Имя атрибута Обязательно Значение
Имя Да Имя свойства, на которое дается ссылка.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу PropertyRef . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В приведенном ниже примере определяется тип сущности (Книга). Ключ сущности определяется ссылкой на свойство 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)

Элемент ReferenceType в языке определения концептуальной схемы (CSDL) указывает ссылку на тип сущности. Элемент ReferenceType может быть дочерним элементом следующих элементов:

  • ReturnType (Function)
  • Параметр
  • CollectionType

Элемент ReferenceType используется при определении параметра или возвращаемого типа для функции.

Элемент ReferenceType может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу ReferenceType .

Имя атрибута Обязательно Значение
Тип Да Имя типа сущности, на который делается ссылка.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу ReferenceType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент ReferenceType , используемый в качестве дочернего элемента Parameter в определяемой моделью функции, которая принимает ссылку на тип сущности 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>

 

В следующем примере показан элемент ReferenceType, используемый в качестве дочернего элемента ReturnType (Function) в определяемой моделью функции, которая возвращает ссылку на тип сущности Person:

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

 

 

Элемент ReferentialConstraint (CSDL)

Элемент ReferentialConstraint в языке определения концептуальной схемы (CSDL) определяет функциональные возможности, аналогичные ограничению целостности ссылок в реляционной базе данных. Свойство (или свойства) типа сущности могут ссылаться на ключ сущности в другом типе сущности также, как столбец (или столбцы) в таблице базы данных могут ссылаться на первичный ключ другой таблицы. Тип сущности, на который ссылается ссылка, называется основным концом ограничения. Тип сущности, ссылающийся на конец субъекта, называется зависимым концом ограничения.

Если внешний ключ, предоставляемый в одном типе сущности, ссылается на свойство другого типа сущности, элемент ReferentialConstraint определяет связь между двумя типами сущностей. Так как элемент ReferentialConstraint содержит сведения о том, как связаны два типа сущностей, соответствующий элемент AssociationSetMapping не требуется в языке спецификации сопоставления (MSL). Связь между двумя типами сущностей, у которых нет внешних ключей, должна иметь соответствующий элемент AssociationSetMapping , чтобы сопоставить сведения об ассоциации с источником данных.

Если внешний ключ не предоставляется в типе сущности, элемент ReferentialConstraint может определить только ограничение первичного ключа к первичному ключу между типом сущности и другим типом сущности.

Элемент ReferentialConstraint может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Субъект (ровно один элемент)
  • Зависимый (ровно один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

Элемент ReferentialConstraint может иметь любое количество атрибутов заметки (пользовательские XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

Пример

В следующем примере показан элемент ReferentialConstraint , используемый в рамках определения ассоциации PublishedBy .

 <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) в языке определения концептуальной схемы (CSDL) задает тип возврата для функции, определенной в элементе Function. Возвращаемый тип функции также можно указать атрибутом ReturnType .

Возвращаемые типы могут быть любым типом EdmSimpleType, типом сущности, сложным типом, типом строки, ссылочный тип или коллекцией одного из этих типов.

Возвращаемый тип функции можно указать с помощью атрибута Type элемента ReturnType (Function) или одного из следующих дочерних элементов:

  • CollectionType
  • Тип ссылки
  • RowType

Примечание.

Модель не проверяет, указан ли тип возвращаемой функции как атрибутом Type элемента ReturnType (Function), так и одним из дочерних элементов.

 

Применимые атрибуты

В следующей таблице описываются атрибуты, которые можно применить к элементу ReturnType (Function).

Имя атрибута Обязательно Значение
ReturnType No Тип, возвращаемый функцией.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу ReturnType (Function). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере элемент Function используется для определения функции, возвращающей количество лет книги в печати. Обратите внимание, что возвращаемый тип указывается атрибутом Type элемента ReturnType (Function).

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

Возвращаемый тип функции указывается атрибутом Type элемента ReturnType (FunctionImport).

Применимые атрибуты

В следующей таблице описаны атрибуты, которые можно применить к элементу 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)

Элемент RowType в языке определения концептуальной схемы (CSDL) определяет неименованную структуру в качестве параметра или возвращаемого типа для функции, определенной в концептуальной модели.

Элемент RowType может быть дочерним элементом следующих элементов:

  • CollectionType
  • Параметр
  • ReturnType (Function)

Элемент 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
  • Function

Элемент Schema может содержать ноль или один элемент Заметки.

Примечание.

Элементы function и заметки разрешены только в CSDL версии 2 и более поздних версиях.

 

Элемент Schema использует атрибут пространства имен для определения пространства имен для типа сущности, сложного типа и объектов ассоциаций в концептуальной модели. В пространстве имен не может быть двух объектов с одинаковым именем. Пространства имен могут охватывать несколько элементов схемы и несколько CSDL-файлов.

Концептуальное пространство имен модели отличается от пространства имен XML элемента Schema . Концептуальное пространство имен модели (как определено атрибутом пространства имен) — это логический контейнер для типов сущностей, сложных типов и типов связей. Пространство имен XML (указанное атрибутом xmlns ) элемента Schema — это пространство имен по умолчанию для дочерних элементов и атрибутов элемента Schema . Пространства имен XML формы https://schemas.microsoft.com/ado/YYYY/MM/edm (где ггГГ и ММ представляют год и месяц соответственно) зарезервированы для CSDL. Пользовательские элементы и атрибуты не могут присутствовать в пространствах имен такого вида.

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу Schema .

Имя атрибута Обязательно Значение
Пространство имен Да Пространство имен концептуальной модели. Значение атрибута пространства имен используется для формирования полного имени типа. Например, если объект EntityType с именем Customer находится в пространстве имен Simple.Example.Model, то полное имя EntityType — SimpleExampleModel.Customer.
Следующие строки нельзя использовать в качестве значения атрибута пространства имен: System, Transient или Edm. Значение атрибута пространства имен не может совпадать со значением атрибута пространства имен в элементе схемы SSDL.
Alias No Идентификатор, используемый в качестве имени пространства имен. Например, если entityType с именем Customer находится в пространстве имен Simple.Example.Model, а значение атрибута AliasModel, можно использовать Model.Customer в качестве полного имени EntityType.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Schema . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показан элемент Schema , содержащий элемент EntityContainer , два элемента EntityType и один элемент Association .

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

Элемент TypeRef в языке определения концептуальной схемы (CSDL) предоставляет ссылку на существующий именованный тип. Элемент TypeRef может быть дочерним элементом элемента CollectionType, который используется для указания того, что функция имеет коллекцию в качестве параметра или возвращаемого типа.

Элемент TypeRef может содержать следующие дочерние элементы (в указанном порядке):

  • Документация (ноль или один элемент)
  • Элементы заметки (ноль или больше элементов)

Применимые атрибуты

В следующей таблице описываются атрибуты, которые можно применить к элементу TypeRef . Обратите внимание, что атрибуты DefaultValue, MaxLength, FixedLength, Precision, Scale, Юникод и Сортировка применимы только к EDMSimpleType.

Имя атрибута Обязательно Значение
Тип No Имя типа, на который дается ссылка.
Допускает значения NULL No True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null.
[!ПРИМЕЧАНИЕ]
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа.
DefaultValue No Значение по умолчанию для свойства.
MaxLength No Максимальная длина значения свойства.
FixedLength No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки фиксированной длины.
Точность No Точность значения свойства.
Масштабировать No Масштаб значения свойства.
SRID No Идентификатор ссылки на пространственные системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server).
Юникод No Значение True или False в зависимости от того, будет ли значение свойства храниться в виде строки Юникода.
Параметры сортировки 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 в языке определения концептуальной схемы (CSDL) импортирует содержимое концептуальной модели, которая существует в другом пространстве имен. Задав значение атрибута пространства имен, можно ссылаться на типы сущностей, сложные типы и типы ассоциаций, определенные в другой концептуальной модели. Несколько элементов Using могут быть дочерним элементом элемента Schema.

Примечание.

Элемент Using в CSDL не работает точно так же, как оператор using на языке программирования. Импортируя пространство имен с инструкцией using на языке программирования, объекты в исходном пространстве имен не влияют. В языке CSDL импортированное пространство имен может содержать тип сущности, производный от типа сущности в исходном пространстве имен. Это может влиять на наборы сущностей, объявленные в исходном пространстве имен.

 

Элемент Using может иметь следующие дочерние элементы:

  • Документация (ноль или один разрешенный элемент)
  • Элементы заметки (ноль или больше разрешенных элементов)

Применимые атрибуты

В таблице ниже описаны атрибуты, которые можно применить к элементу Using .

Имя атрибута Обязательно Значение
Пространство имен Да Имя импортируемого пространства имен.
Alias Да Идентификатор, используемый в качестве имени пространства имен. Хотя этот атрибут является обязательным, необязательно, чтобы он использовался вместо имени пространства имен при указании имен объектов.

 

Примечание.

Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Using . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

 

Пример

В следующем примере показано, как использовать элемент Using для импорта пространства имен, определенного в другом месте. Обратите внимание, что отображаемое пространство имен для элемента BooksModelSchema. Свойство Address PublisherEntityType — это сложный тип, определенный в 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)

Атрибуты annotation в языке CSDL представляют собой настраиваемые атрибуты XML в концептуальной модели. Атрибуты annotation должны не только иметь допустимую структуру XML, но и соответствовать следующим требованиям:

  • Атрибуты annotation не должны находиться ни в одном пространстве имен XML, которое зарезервировано для языка CSDL.
  • К данному конкретному элементу языка CSDL может применяться несколько атрибутов annotation.
  • Полные имена любых двух атрибутов annotation не должны совпадать.

Атрибуты 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>

 

Следующий код извлекает метаданные из атрибута 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:CustomAttribute"))
 {
     MetadataProperty annotationProperty =
         contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
     object annotationValue = annotationProperty.Value;
     Console.WriteLine(annotationValue.ToString());
 }

 

Вышеуказанный код предполагает, что файл School.csdl находится в выходном каталоге проекта, а в проект добавлены инструкции Imports и Using:

 using System.Data.Metadata.Edm;

 

 

Элементы примечаний (CSDL)

Элементы annotation в языке CSDL представляют собой настраиваемые элементы XML в концептуальной модели. Элементы annotation должны не только иметь допустимую структуру XML, но и соответствовать следующим требованиям:

  • Элементы annotation не должны находиться в каком-либо пространстве имен XML, которое зарезервировано для языка CSDL.
  • У данного элемента языка CSDL может быть больше одного дочернего элемента annotation.
  • Полные имена любых двух элементов annotation не должны совпадать.
  • Элементы annotation должны находиться после всех остальных дочерних элементов в данном элементе CSDL.

Элементы annotation могут использоваться для предоставления дополнительных метаданных об элементах в концептуальной модели. Начиная с платформа .NET Framework версии 4 метаданные, содержащиеся в элементах заметки, можно получить доступ во время выполнения с помощью классов в пространстве имен System.Data.Metadata.Edm.

Пример

В следующем примере показан элемент EntityType с элементом заметки (CustomElement). В следующем примере показано применение атрибута 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 находится в выходном каталоге проекта, а в проект добавлены инструкции Imports и Using.

 using System.Data.Metadata.Edm;

 

 

Типы концептуальной модели (CSDL)

Язык определения концептуальной схемы (CSDL) поддерживает набор абстрактных примитивных типов данных, называемых EDMSimpleTypes, которые определяют свойства в концептуальной модели. EDMSimpleTypes — это прокси-серверы для примитивных типов данных, поддерживаемых в хранилище или среде размещения.

В приведенной ниже таблице представлены примитивные типы данных, поддерживаемые CSDL. В таблице также перечислены аспекты, которые можно применить к каждому EDMSimpleType.

EDMSimpleType Description Применимые аспекты
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, default, SRID
Edm.GeographyPoint Значение NULL, default, SRID
Edm.GeographyLineString Значение NULL, default, SRID
Edm.GeographyPolygon Значение NULL, default, SRID
Edm.GeographyMultiPoint Значение NULL, default, SRID
Edm.GeographyMultiLineString Значение NULL, default, SRID
Edm.GeographyMultiPolygon Значение NULL, default, SRID
Edm.GeographyCollection Значение NULL, default, SRID
Edm.Geometry Значение NULL, default, SRID
Edm.GeometryPoint Значение NULL, default, SRID
Edm.GeometryLineString Значение NULL, default, SRID
Edm.GeometryPolygon Значение NULL, default, SRID
Edm.GeometryMultiPoint Значение NULL, default, SRID
Edm.GeometryMultiLineString Значение NULL, default, SRID
Edm.GeometryMultiPolygon Значение NULL, default, SRID
Edm.GeometryCollection Значение NULL, default, SRID

Области (CSDL)

Аспекты в языке CSDL представляют ограничения для свойств типов сущности и сложных типов. Аспекты выглядят как XML-атрибуты в следующих элементах CSDL:

  • Свойство
  • TypeRef
  • Параметр

В следующей таблице описываются аспекты, поддерживаемые в CSDL. Все аспекты являются необязательными. Некоторые аспекты, перечисленные ниже, используются Entity Framework при создании базы данных из концептуальной модели.

Примечание.

Сведения о типах данных в концептуальной модели см. в разделе "Концептуальные типы моделей" (CSDL).

Аспект Description Применяется к Используется для создания базы данных Используется средой выполнения
Параметры сортировки Задает последовательность сортировки, которая будет использоваться при выполнении операций сравнения и упорядочивания для значений свойств. Edm.String Да Нет
ConcurrencyMode Указывает, что значение свойства должно использоваться в проверках оптимистического управления параллелизмом. Все свойства EDMSimpleType No Да
По умолчанию Задает значение по умолчанию для свойства в случае, если при создании экземпляра не было задано значение. Все свойства EDMSimpleType Да Да
FixedLength Указывает, может ли изменяться длина значения свойства. Edm.Binary, Edm.String Да Нет
MaxLength Указывает максимальную длину значения свойства. Edm.Binary, Edm.String Да Нет
Допускает значения NULL Указывает, может ли свойство иметь значение NULL . Все свойства EDMSimpleType Да Да
Точность Для свойств типа Decimal указывает число цифр, которые могут иметь значение свойства. Для свойств типа Time, DateTime и DateTimeOffset указывает количество цифр для дробной части секунд значения свойства. Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time Да Нет
Масштабировать Задает число цифр справа от десятичной запятой в значении свойства. Edm.Decimal Да Нет
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 Да
Юникод Указывает, будет ли значение свойства храниться в Юникоде. Edm.String Да Да

Примечание.

При создании базы данных из концептуальной модели мастер создания базы данных распознает значение атрибута StoreGeneratedPattern в элементе Property, если он находится в следующем пространстве имен. https://schemas.microsoft.com/ado/2009/02/edm/annotation Поддерживаемые значения атрибута — Identity и Computed. Значение Identity создает столбец базы данных со значением удостоверения, созданным в базе данных. Значение Вычисляемого объекта создает столбец со значением, вычисляющимся в базе данных.

Пример

В следующем примере показывается применение аспектов к свойствам типа сущности:

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