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

Язык CSDL — это язык на основе XML, описывающий сущности, связи и функции, составляющие концептуальную модель управляемого данными приложения. Эта концептуальная модель может использоваться Entity Framework или WCF Data Services. Метаданные, описанные в языке CSDL, используются Entity Framework для соотнесения сущностей и связей, определенных в концептуальной модели, к источнику данных. Дополнительные сведения см. в статье спецификации языка SSDL и спецификации MSL.

Язык CSDL — это реализация EDM Entity Framework.

В приложении Entity Framework метаданные концептуальной модели загружаются из CSDL-файла (написанного на языке CSDL) в экземпляр класса System. Data. Metadata. EDM. коллекций EdmItemCollection и доступны с помощью методов в классе System. Data. Metadata. EDM. MetadataWorkspace. Entity Framework использует метаданные концептуальной модели для преобразования запросов к концептуальной модели в команды, относящиеся к источнику данных.

Конструктор EF сохраняет сведения о концептуальной модели в EDMX файле во время разработки. Во время сборки конструктор EF использует сведения в EDMX-файле для создания CSDL-файла, необходимого для Entity Framework во время выполнения.

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

Версия языка CSDL Пространство имен XML
Язык CSDL v1 https://schemas.microsoft.com/ado/2006/04/edm
Язык CSDL v2 https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3 https://schemas.microsoft.com/ado/2009/11/edm

 

Элемент Association (CSDL)

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

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

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

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

  • Documentation (ноль или один элемент)
  • End (ровно 2 элемента)
  • ReferentialConstraint (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

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

 

Примечание

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

 

Пример

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

  • Documentation (допустимое количество элементов — ноль или один)
  • End (требуется ровно 2 элемента)
  • Элементы Annotation (допустимое количество элементов — ноль или больше)

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

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

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

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

 

Примечание

К элементу AssociationSet можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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, точность, масштаб, Юникоди Параметры сортировки применимы только к коллекциям едмсимплетипес.

Имя атрибута Обязательный Значение
Тип Нет Тип коллекции.
Допускает значения NULL Нет True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null.
[!NOTE]
> В языке CSDL v1 свойство сложного типа должно иметь значение Nullable="False" .
DefaultValue Нет Значение по умолчанию для свойства.
MaxLength Нет Максимальная длина значения свойства.
FixedLength Нет Значение true или false в зависимости от того, будет ли значение свойства храниться как строка фиксированной длины.
Точность Нет Точность значения свойства.
Масштабирование Нет Масштаб значения свойства.
SRID Нет Идентификатор пространственной системной ссылки. Допустимо только для свойств пространственных типов.   Дополнительные сведения см. в разделе SRID and SRID (SQL Server) .
Юникод Нет Значение true или false в зависимости от того, будет ли значение свойства храниться как строка в Юникоде.
Параметры сортировки Нет Строка, указывающая порядок сортировки, используемый в источнике данных.

 

Примечание

К элементу CollectionType можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 для указания того, что функция принимает в качестве параметра коллекцию типов сущностей отдела .

 <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 может иметь следующие дочерние элементы (в указанном порядке):

  • Documentation (ноль или один элемент)
  • Property (ноль или больше элементов)
  • Элементы Annotation (ноль или более элементов)

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

Имя атрибута Обязательный Значение
Имя Да Имя сложного типа. Имя сложного типа не может совпадать с именем другого сложного типа, типа сущности или сопоставления, которые находятся в области модели.
BaseType Нет Имя другого сложного типа, который является базовым типом определяемого сложного типа.
[!NOTE]
> Этот атрибут неприменим в CSDL v1. В этой версии не поддерживается наследование для сложных типов.
Аннотация Нет True или false (значение по умолчанию) в зависимости от того, является ли сложный тип абстрактным типом.
[!NOTE]
> Этот атрибут неприменим в CSDL v1. Сложные типы в этой версии не могут быть абстрактными типами.

 

Примечание

К элементу complexType можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 в качестве сложного типа для типа сущности (Publisher):

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

 

 

Элемент DefiningExpression (CSDL)

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

Примечание

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

 

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

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

Пример

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

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

 

 

Элемент Dependent (CSDL)

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

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

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

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

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

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

 

Примечание

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

 

Пример

В следующем примере показан элемент ReferentialConstraint , используемый как часть определения ассоциации публишедби . Свойство 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 Designer (например, сущность, ассоциация или свойство), содержимое элемента documentation будет отображаться в окне Visual Studio свойства объекта.

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

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

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

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

Пример

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

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

 

 

Элемент End (CSDL)

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

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

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

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

  • Documentation (ноль или один элемент)
  • OnDelete (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

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

 

Примечание

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

 

Пример

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

  • Documentation (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

Примечание

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

 

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

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

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

 

Примечание

К конечному элементу можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 .

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

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

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

 

Примечание

К элементу EntityContainer можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 может иметь следующие дочерние элементы (в указанном порядке):

  • Элемент Documentation (допускается ровно один элемент либо элемент может отсутствовать)
  • Элементы Annotation (допустимое количество элементов — ноль или больше)

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

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

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

 

Примечание

К элементу EntitySet можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 представляет структуру концепции верхнего уровня, например Customer или Order, в концептуальной модели. Тип сущности — это шаблон для экземпляров типов сущностей в приложении. Каждый шаблон содержит следующие сведения.

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

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

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

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

  • Documentation (ноль или один элемент)
  • Key (ноль или один элемент)
  • Property (ноль или больше элементов)
  • NavigationProperty (допустимое количество элементов — ноль или больше)
  • Элементы Annotation (ноль или более элементов)

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

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

Имя атрибута Обязательный Значение
Имя Да Имя типа сущности.
BaseType Нет Имя другого типа сущности, который является базовым типом определяемого типа сущности.
Аннотация Нет Значение true или falseв зависимости от того, является ли тип сущности абстрактным типом.
OpenType Нет Значение true или false в зависимости от того, является ли тип сущности открытым типом сущности.
[!NOTE]
>атрибут > применим только к типам сущностей, определенным в концептуальных моделях, которые используются со службами ADO.NET Data Services.

 

Примечание

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

 

Пример

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

  • Documentation (ноль или один элемент)
  • Элемент (ноль или более элементов)
  • Элементы Annotation (ноль или более элементов)

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

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

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

 

Примечание

К элементу enumType можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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.  

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

  • Documentation (ноль или один элемент)
  • Parameter (ноль или больше элементов)
  • DefiningExpression (ноль или один элемент)
  • ReturnType (функция) (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

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

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

 

Примечание

К элементу функции можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 может иметь следующие дочерние элементы (в указанном порядке):

  • Documentation (допустимое количество элементов — ноль или один)
  • Parameter (допустимое количество элементов — ноль или больше)
  • Элементы Annotation (допустимое количество элементов — ноль или больше)
  • ReturnType (FunctionImport) (разрешено ноль или более элементов)

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

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

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

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

Имя атрибута Обязательный Значение
Имя Да Имя импортируемой функции.
ReturnType Нет Тип, возвращаемый функцией. Не используйте этот атрибут, если функция не возвращает значение. В противном случае значение должно быть коллекцией типа ComplexType, EntityType или EDMSimpleType.
EntitySet Нет Если функция возвращает коллекцию типов сущностей, то значение EntitySet должно быть набором сущностей, к которому принадлежит коллекция. В противном случае атрибут EntitySet не должен использоваться.
IsComposable Нет Если значение равно true, функция является составной (функция с табличным значением) и может использоваться в запросе LINQ.  Значение по умолчанию — false.

 

Примечание

К элементу FunctionImport можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 (один или несколько элементов)
  • Элементы Annotation (ноль или более элементов)

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

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

Пример

В приведенном ниже примере определяется тип сущности « Book». Ключ сущности определяется с помощью ссылки на свойство ISBN типа сущности.

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

 

Свойство ISBN является хорошим выбором для ключа сущности, так как Международный номер книги (ISBN) является уникальным идентификатором книги.

В следующем примере показан тип сущности (Author), имеющий ключ сущности, состоящий из двух свойств: Name и Address.

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

 

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

 

Элемент Member (CSDL)

Элемент member является дочерним элементом элемента enumType и определяет элемент перечисляемого типа.

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

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

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

 

Примечание

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

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

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

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

  • Documentation (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

Имя атрибута Обязательный Значение
Имя Да Имя свойства навигации.
Связь Да Имя ассоциации, расположенной в пределах области модели.
ToRole Да Конечная точка ассоциации на которой заканчивается навигация. Значение атрибута ToRole должно совпадать со значением одного из атрибутов роли , определенных на одной из сторон ассоциации (определена в элементе AssociationEnd).
FromRole Да Конечная точка ассоциации с которой начинается навигация. Значение атрибута FromRole должно совпадать со значением одного из атрибутов роли , определенных на одной из сторон ассоциации (определена в элементе AssociationEnd).

 

Примечание

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

 

Пример

В следующем примере определяется тип сущности (Book) с двумя свойствами навигации (публишедби и вриттенби):

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

 

 

Элемент OnDelete (CSDL)

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

Примечание

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

 

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

  • Documentation (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

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

 

Примечание

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

 

Пример

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

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

 

 

Элемент Parameter (CSDL)

Элемент Parameter в языке CSDL может быть дочерним по отношению к элементу FunctionImport или Function.

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

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

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

  • Documentation (допустимое количество элементов — ноль или один)
  • Элементы Annotation (допустимое количество элементов — ноль или больше)

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

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

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

 

Примечание

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

 

Пример

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

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

 

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

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

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

  • Documentation (ноль или один элемент)
  • CollectionType (ноль или один элемент)
  • ReferenceType (ноль или один элемент)
  • RowType (ноль или один элемент)

Примечание

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

 

  • Элементы Annotation (допустимое количество элементов — ноль или больше)

Примечание

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

 

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

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

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

 

Примечание

К элементу Parameter можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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)

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

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

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

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

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

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

 

Примечание

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

 

Пример

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

 <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 может иметь следующие дочерние элементы (в указанном порядке):

  • Элемент Documentation (допускается ровно один элемент либо элемент может отсутствовать)
  • Элементы Annotation (допустимое количество элементов — ноль или больше)

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

Примечание

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

 

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

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

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

 

Примечание

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

 

Пример

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

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

 

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

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

 

Применение элемента RowType

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

Элемент Property может иметь только один из следующих дочерних элементов:

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

Элемент Property может иметь любое число дочерних элементов аннотации.

Примечание

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

 

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

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

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

 

Примечание

К элементу Свойства можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 v2 и более поздних версиях.

 

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

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

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

 

Примечание

К элементу PropertyRef можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 (функция)
  • Параметр
  • CollectionType

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

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

  • Documentation (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

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

 

Примечание

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

 

Пример

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

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

 

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

  • Documentation (ноль или один элемент)
  • Principal (ровно один элемент)
  • Dependent (ровно один элемент)
  • Элементы Annotation (ноль или более элементов)

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

Элемент ReferentialConstraint может иметь любое количество атрибутов аннотации (НАСТРАИВАЕМЫЕ атрибуты XML). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.

Пример

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

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

 

 

Элемент ReturnType (Function) (CSDL)

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

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

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

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

Примечание

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

 

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

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

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

 

Примечание

К элементу ReturnType (Function) можно применить любое количество атрибутов аннотации (пользовательские XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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).

Имя атрибута Обязательный Значение
Тип Нет Тип, возвращаемый функцией. Значение должно быть коллекцией типа ComplexType, EntityType или EDMSimpleType.
EntitySet Нет Если функция возвращает коллекцию типов сущностей, то значение EntitySet должно быть набором сущностей, к которому принадлежит коллекция. В противном случае атрибут EntitySet не должен использоваться.

 

Примечание

К элементу ReturnType (FunctionImport) можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 (функция)

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

  • Property (один или больше)
  • Элементы annotation (ноль или больше)

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

К элементу RowType можно применить любое количество атрибутов аннотации (настраиваемые XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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
  • Компонент

Элемент схемы может содержать не более одного элемента annotation.

Примечание

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

 

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

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

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

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

Имя атрибута Обязательный Значение
Пространство имен Да Пространство имен концептуальной модели. Значение атрибута Namespace используется для формирования полного имени типа. Например, если EntityType с именем Customer находится в пространстве имен Simple. example. Model, то полное имя EntityType — симпликсамплемодел. Customer.
Следующие строки не могут использоваться в качестве значения для атрибута пространства имен : System, временныеили EDM. Значение атрибута пространства имен не может совпадать со значением атрибута Namespace в элементе схемы SSDL.
Псевдоним Нет Идентификатор, используемый в качестве имени пространства имен. Например, если EntityType с именем Customer находится в пространстве имен Simple. пример. Model, а значение атрибута Aliasmodel, то можно использовать модель. Customer как полное имя EntityType.

 

Примечание

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

 

Пример

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

  • Documentation (ноль или один элемент)
  • Элементы Annotation (ноль или более элементов)

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

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

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

 

Примечание

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

 

Пример

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

 <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 импортирует содержимое концептуальной модели, которая существует в другом пространстве имен. Устанавливая значение атрибута Namespace , можно ссылаться на типы сущностей, сложные типы и типы взаимосвязей, определенные в другой концептуальной модели. Более одного элемента using может быть потомком элемента Schema .

Примечание

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

 

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

  • Documentation (допустимое количество элементов — ноль или один)
  • Элементы Annotation (допустимое количество элементов — ноль или больше)

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

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

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

 

Примечание

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

 

Пример

В следующем примере показан элемент using , используемый для импорта пространства имен, определенного в других местах. Обратите внимание, что пространство имен для элемента схемы показано на рисунке . AddressСвойство Publisher типа Address — сложный тип, определенный в ExtendedBooksModel пространстве имен (импортированный с Publisher элемента).

 <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 могут использоваться для предоставления дополнительных метаданных об элементах в концептуальной модели. Метаданные, содержащиеся в элементах 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 метаданные, содержащиеся в элементах annotation, могут быть доступны во время выполнения с помощью классов в пространстве имен System. Data. metadata. Edm.

Пример

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

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

EDMSimpleType Описание Применимые аспекты
Edm.Binary Содержит двоичные данные. MaxLength, FixedLength, Nullable, Default
Edm.Boolean Содержит значение true или false. Nullable, Default
Edm.Byte Содержит 8-битное целое значение без знака. Precision, Nullable, Default
Edm.DateTime Представляет дату и время. Precision, Nullable, Default
Edm.DateTimeOffset Возвращает дату и время в виде смещения в минутах от времени GMT. Precision, Nullable, Default
Edm.Decimal Содержит точное числовое значение с заданной точностью и масштабом. Precision, Nullable, Default
Edm.Double Содержит число с плавающей запятой с точностью до 15 цифр Precision, Nullable, Default
EDM. float Содержит число с плавающей запятой с точностью до 7 знаков. Precision, Nullable, Default
Edm.Guid Содержит уникальный 16-битный идентификатор. Precision, Nullable, Default
Edm.Int16 Содержит 16-разрядное целое значение со знаком. Precision, Nullable, Default
Edm.Int32 Содержит 32-разрядное целое значение со знаком. Precision, Nullable, Default
Edm.Int64 Содержит 64-разрядное целое значение со знаком. Precision, Nullable, Default
Edm.SByte Содержит 8-разрядное целое значение со знаком. Precision, Nullable, Default
Edm.String Содержит символьные данные. Unicode, FixedLength, MaxLength, Collation, Precision, Nullable, Default
Edm.Time Содержит время дня. Precision, Nullable, Default
Модель EDM. geography Nullable, по умолчанию, SRID
Edm.GeographyPoint Nullable, по умолчанию, SRID
EDM. GeographyLineString Nullable, по умолчанию, SRID
EDM. GeographyPolygon Nullable, по умолчанию, SRID
EDM. GeographyMultiPoint Nullable, по умолчанию, SRID
EDM. GeographyMultiLineString Nullable, по умолчанию, SRID
EDM. GeographyMultiPolygon Nullable, по умолчанию, SRID
EDM. Жеографиколлектион Nullable, по умолчанию, SRID
EDM. Geometry Nullable, по умолчанию, SRID
EDM. GeometryPoint Nullable, по умолчанию, SRID
EDM. GeometryLineString Nullable, по умолчанию, SRID
EDM. GeometryPolygon Nullable, по умолчанию, SRID
EDM. GeometryMultiPoint Nullable, по умолчанию, SRID
EDM. GeometryMultiLineString Nullable, по умолчанию, SRID
EDM. GeometryMultiPolygon Nullable, по умолчанию, SRID
EDM. GeometryCollection Nullable, по умолчанию, SRID

Области (CSDL)

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

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

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

Примечание

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

Аспект Описание Применяется к Используется для создания базы данных Используется средой выполнения
Параметры сортировки Задает последовательность сортировки, которая будет использоваться при выполнении операций сравнения и упорядочивания для значений свойств. Edm.String Да Нет
ConcurrencyMode Указывает, что значение свойства должно использоваться в проверках оптимистического управления параллелизмом. Все свойства EDMSimpleType Нет Да
По умолчанию Задает значение по умолчанию для свойства в случае, если при создании экземпляра не было задано значение. Все свойства 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 and SRID (SQL Server). EDM. geography, EDM. GeographyPoint, EDM. GeographyLineString, EDM. GeographyPolygon, EDM. GeographyMultiPoint, EDM. GeographyMultiLineString, EDM. GeographyMultiPolygon, EDM. Жеографиколлектион, EDM. Geometry, EDM. GeometryPoint, EDM. GeometryLineString, EDM. GeometryPolygon, EDM. GeometryMultiPoint, EDM. GeometryMultiLineString, EDM. GeometryMultiPolygon, EDM. GeometryCollection Нет Да
Юникод Указывает, будет ли значение свойства храниться в Юникоде. Edm.String Да Да

Примечание

При формировании базы данных из концептуальной модели мастер создания базы данных будет распознавать значение атрибута StoreGeneratedPattern в элементе Property , если оно находится в следующем пространстве имен: . Для атрибута поддерживаются значения Identity и COMPUTE. Значение 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>