Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
CSDL версии 1 не поддерживается, обновите до версии 3.
Язык CSDL — это язык на основе XML, описывающий сущности, связи и функции, составляющие концептуальную модель управляемого данными приложения. Эту концептуальную модель можно использовать в Entity Framework или службы данных WCF. Метаданные, описанные в CSDL, используются Entity Framework для сопоставления сущностей и связей, определенных в концептуальной модели с источником данных. Дополнительные сведения см. в спецификации SSDL и спецификации MSL.
CSDL — это реализация Entity Framework модели данных сущностей.
В приложении Entity Framework метаданные концептуальной модели загружаются из CSDL-файла (написанного в CSDL) в экземпляр system.Data.Metadata.Edm.EdmItemCollection и доступны с помощью методов в классе System.Data.Metadata.Edm.MetadataWorkspace. Entity Framework использует метаданные концептуальной модели для перевода запросов, обращенных к концептуальной модели, в команды, специфичные для источника данных.
В EF Designer хранятся концептуальные сведения о модели в edmx-файле во время разработки. Во время сборки конструктор EF использует сведения в edmx-файле для создания CSDL-файла, необходимого Entity Framework во время выполнения.
Версии языка CSDL различаются по пространствам имен XML.
| Версия CSDL | Пространство имен XML |
|---|---|
| CSDL версии 1 | https://schemas.microsoft.com/ado/2006/04/edm |
| CSDL версии 2 | https://schemas.microsoft.com/ado/2008/09/edm |
| CSDL версии 3 | https://schemas.microsoft.com/ado/2009/11/edm |
Элемент Ассоциация (CSDL)
Элемент Association определяет связь между двумя типами сущностей. Ассоциация должна указывать типы сущностей, которые участвуют в связи, и возможное количество типов сущностей на каждом конце связи, которое называется кратностью. Кратность конца связи может иметь значение один (1), ноль или один (0..1), или многие (*). Эта информация указана в двух дочерних элементах End.
К экземплярам типов сущностей на одном конце ассоциации можно получить доступ посредством свойств навигации или внешних ключей, если они представлены в типе сущности.
В приложении экземпляр ассоциации представляет конкретную ассоциацию между экземплярами типов сущностей. Экземпляры ассоциации логически сгруппированы в набор ассоциаций.
Элемент Association может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- End (ровно 2 элемента)
- ReferentialConstraint (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу Association .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя ассоциации. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Association . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент Association, который определяет связь CustomerOrders, когда внешние ключи отсутствуют в типах сущностей Customer и Order. Значения кратности для каждого конца ассоциации указывают на то, что многие заказы могут быть связаны с клиентом, но только один клиент может быть связан с заказом. Кроме того, элемент OnDelete указывает, что все заказы, связанные с определенным клиентом, и загружены в ObjectContext, будут удалены, если клиент удален.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
</Association>
В следующем примере показан элемент Association, который определяет связь CustomerOrders, когда внешние ключи были обнародованы для типов сущностей Customer и Order. При использовании внешних ключей связь между сущностями управляется элементом ReferentialConstraint . Соответствующий элемент AssociationSetMapping не требуется для сопоставления этой связи с источником данных.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" >
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Order">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
Элемент AssociationSet (CSDL)
Элемент AssociationSet в языке определения концептуальной схемы (CSDL) — это логический контейнер для экземпляров ассоциаций одного типа. Набор ассоциаций предоставляет определение для группировки экземпляров ассоциаций, чтобы их можно было сопоставить с источником данных.
Элемент AssociationSet может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один разрешенный элемент)
- Конец (ровно два необходимых элемента)
- Элементы заметки (ноль или больше разрешенных элементов)
Атрибут Association указывает тип ассоциации, которая содержит набор ассоциаций. Наборы сущностей, которые составляют окончания набора ассоциаций, определяются ровно двумя дочерними элементами End.
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу AssociationSet .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя набора сущностей. Значение атрибута Name не может совпадать со значением атрибута Association. |
| Ассоциация | Да | Полностью квалифицированное имя ассоциации, экземпляры которой содержатся в наборе ассоциаций. Ассоциация должна находиться в том же пространстве имен, что и набор ассоциаций. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу AssociationSet . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EntityContainer с двумя элементами AssociationSet:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Элемент CollectionType (CSDL)
Элемент CollectionType в языке определения концептуальной схемы (CSDL) указывает, что параметр функции или возвращаемый тип функции является коллекцией. Элемент CollectionType может быть дочерним элементом элемента Parameter или элементом ReturnType (Function). Тип коллекции можно указать с помощью атрибута Type или одного из следующих дочерних элементов:
- CollectionType
- Тип ссылки
- ТипСтроки
- TypeRef
Примечание.
Модель не проверяет, указан ли тип коллекции как атрибутом Type , так и дочерним элементом.
Применимые атрибуты
В следующей таблице описаны атрибуты, которые можно применить к элементу CollectionType . Обратите внимание, что атрибуты DefaultValue, MaxLength, FixedLength, Precision, Scale, unicode и колляция применимы только к коллекциям EDMSimpleTypes.
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Тип | Нет | Тип коллекции. |
| Nullable | Нет |
True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null. [!ПРИМЕЧАНИЕ] |
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа. |
||
| DefaultValue | Нет | Значение по умолчанию для свойства. |
| MaxLength | Нет | Максимальная длина значения свойства. |
| FixedLength | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка фиксированной длины. |
| Точность | Нет | Точность значения свойства. |
| Масштабировать | Нет | Масштаб значения свойства. |
| SRID | Нет | Идентификатор пространственной системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server) |
| Юникод | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка Юникода. |
| Колляция | Нет | Строка, указывающая порядок сортировки, используемый в источнике данных. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу CollectionType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показана определяемая моделью функция, которая использует элемент CollectionType для указания того, что функция возвращает коллекцию типов сущностей Person (как указано с атрибутом ElementType ).
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String"/>
<ReturnType>
<CollectionType ElementType="SchoolModel.Person"/>
</ReturnType>
<DefiningExpression>
SELECT VALUE p
FROM SchoolEntities.People AS p
WHERE p.LastName >= someString
</DefiningExpression>
</Function>
В следующем примере показана определяемая моделью функция, использующая элемент CollectionType , чтобы указать, что функция возвращает коллекцию строк (как указано в элементе RowType ).
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
В следующем примере показана определяемая моделью функция, использующая элемент CollectionType, чтобы указать, что функция принимает в качестве параметра коллекцию типов сущностей Department.
<Function Name="GetAvgBudget">
<Parameter Name="Departments">
<CollectionType>
<TypeRef Type="SchoolModel.Department"/>
</CollectionType>
</Parameter>
<ReturnType Type="Collection(Edm.Decimal)"/>
<DefiningExpression>
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression>
</Function>
Элемент ComplexType (CSDL)
Элемент ComplexType определяет структуру данных, состоящую из свойств EdmSimpleType или других сложных типов. Сложный тип может быть свойством типа сущности или другого сложного типа. Сложный тип аналогичен типу сущности, поскольку также определяет данные. Однако между сложными типами и типами сущности существуют некоторые ключевые различия.
- Сложные типы не имеют идентификаторов (или ключей) и поэтому не могут существовать независимо. Сложные типы могут существовать только как свойства типов сущностей или других сложных типов.
- Сложные типы не могут участвовать в сопоставлениях. Ни конец ассоциации не может быть сложным типом, поэтому свойства навигации не могут быть определены для сложных типов.
- Свойство сложного типа не может иметь значение null, хотя каждое скалярное свойство сложного типа может быть установлено в это значение.
Элемент ComplexType может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Свойство (ноль или несколько элементов)
- Элементы заметки (ноль или больше элементов)
В таблице ниже описаны атрибуты, которые можно применить к элементу ComplexType .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя. | Да | Имя сложного типа. Имя сложного типа не может совпадать с именем другого сложного типа, типа сущности или сопоставления, которые находятся в области модели. |
| BaseType | Нет | Имя другого сложного типа, который является базовым типом определяемого сложного типа. [!ПРИМЕЧАНИЕ] |
| > Этот атрибут неприменимо в CSDL версии 1. В этой версии не поддерживается наследование для сложных типов. | ||
| Краткие сведения | Нет | Значение True или False (по умолчанию) в зависимости от того, абстрактен ли сложный тип. [!ПРИМЕЧАНИЕ] |
| > Этот атрибут неприменимо в CSDL версии 1. Сложные типы в этой версии не могут быть абстрактными типами. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу ComplexType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан сложный тип, Address с свойствами EdmSimpleType StreetAddress, City, StateOrProvince, Country и PostalCode.
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
Чтобы определить сложный тип Address (выше) как свойство типа сущности, необходимо объявить тип свойства в определении типа сущности. В следующем примере показано свойство Address в качестве сложного типа для типа сущности (Publisher):
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BooksModel.Address" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
Элемент DefiningExpression (CSDL)
Элемент DefineingExpression в языке определения концептуальной схемы (CSDL) содержит выражение Entity SQL, определяющее функцию в концептуальной модели.
Примечание.
В целях проверки элемент DefiningExpression может содержать произвольное содержимое. Однако Entity Framework вызовет исключение во время выполнения, если элемент DefiningExpression не содержит допустимый объект Entity SQL.
Применимые атрибуты
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу DefiningExpression . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере для определения функции, возвращающей количество лет после публикации книги, используется элемент DefineingExpression . Содержимое элемента DefiningExpression записывается в Entity SQL.
<Function Name="GetYearsInPrint" ReturnType="Edm.Int32" >
<Parameter Name="book" Type="BooksModel.Book" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression>
</Function>
Зависимый элемент (CSDL)
Элемент Зависимый в языке определения концептуальной схемы (CSDL) является дочерним элементом элемента ReferentialConstraint и определяет зависимый конец ссылочного ограничения. Элемент ReferentialConstraint определяет функциональные возможности, аналогичные ограничению целостности ссылки в реляционной базе данных. Свойство (или свойства) типа сущности могут ссылаться на ключ сущности в другом типе сущности также, как столбец (или столбцы) в таблице базы данных могут ссылаться на первичный ключ другой таблицы. Тип сущности, на который ссылается ссылка, называется основным концом ограничения. Тип сущности, ссылающийся на основной конец, называется зависимым концом ограничения. Элементы PropertyRef используются для указания ключей, ссылающихся на основной конец.
Элемент Зависимый может содержать следующие дочерние элементы (в указанном порядке):
- PropertyRef (один или несколько элементов)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В приведенной ниже таблице описаны атрибуты, которые можно применить к зависимому элементу.
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Роль | Да | Имя типа сущности на зависимом конце ассоциации. |
Примечание.
Любое количество атрибутов аннотации (настраиваемых XML-атрибутов) может применяться к элементу Dependent. Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент ReferentialConstraint, используемый в контексте определения ассоциации PublishedBy. Свойство PublisherId типа сущности Book составляет зависимый конец референтного ограничения.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Элемент документации (CSDL)
Элемент Documentation в языке определения концептуальной схемы (CSDL) можно использовать для предоставления сведений об объекте, определенном в родительском элементе. В edmx-файле, когда элемент Documentation является дочерним элементом элемента, который отображается как объект на поверхности дизайна конструктора EF (например, сущность, ассоциация или свойство), содержимое элемента "Документация" появится в окне свойств Visual Studio для данного объекта.
Элемент Documentation может содержать следующие дочерние элементы (в указанном порядке):
- Сводка. Краткое описание родительского элемента. (ноль или один элемент)
- LongDescription: обширное описание родительского элемента. (ноль или один элемент)
- Элементы аннотации. (ноль или больше элементов)
Применимые атрибуты
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Documentation . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент Documentation в качестве дочернего элемента элемента EntityType. Если приведенный ниже фрагмент был частью содержимого CSDL в файле .edmx, содержимое элементов Summary и LongDescription будет отображаться в окне свойств Visual Studio при щелчке по типу Customer сущности.
<EntityType Name="Customer">
<Documentation>
<Summary>Summary here.</Summary>
<LongDescription>Long description here.</LongDescription>
</Documentation>
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Type="Int32" Name="CustomerId" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
</EntityType>
Конечный элемент (CSDL)
Элемент End в языке определения концептуальной схемы (CSDL) может быть дочерним элементом элемента Association или элементом AssociationSet. В каждом случае роль элемента End отличается, а применимые атрибуты отличаются.
Элемент End как дочерний по отношению к элементу Association
Элемент End (как дочерний элемент элемента Association ) определяет тип сущности в одной части ассоциации и число экземпляров типов сущностей, которые могут существовать в этом конце ассоциации. Конечные точки ассоциации определяются как часть ассоциации; ассоциация должна иметь ровно два конца ассоциации. Экземпляры типов сущности на одном конце ассоциации можно получить с помощью навигационных свойств или внешних ключей, если они доступны в типе сущности.
Элемент End может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- OnDelete (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В следующей таблице описываются атрибуты, которые можно применять к элементу End , когда он является дочерним элементом элемента Association .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Тип | Да | Имя типа сущности на одном конце ассоциации. |
| Роль | Нет | Имя для элемента ассоциации. Если имя не было предоставлено, будет использовано имя типа сущности на конце ассоциации. |
| Кратность | Да |
1, 0.1 или * в зависимости от количества экземпляров типа сущности, которые могут находиться в конце связи. 1 указывает, что в конце связи существует ровно один экземпляр типа сущности. 0..1 указывает, что в конце связи существует от 0 до 1 экземпляров типа сущности. * указывает, что на конце ассоциации существуют ноль, один или несколько экземпляров типа сущности. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу End . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент Association, определяющий ассоциацию CustomerOrders. Значения кратности для каждого конца ассоциации указывают на то, что многие заказы могут быть связаны с клиентом, но только один клиент может быть связан с заказом. Кроме того, элемент OnDelete указывает, что все заказы, связанные с конкретным клиентом, и которые были загружены в ObjectContext, будут удалены, если клиент удален.
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1" />
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*">
<OnDelete Action="Cascade" />
</End>
</Association>
Элемент End как дочерний по отношению к элементу AssociationSet
Элемент End задает один конец набора ассоциаций. Элемент AssociationSet должен содержать два элемента End . Сведения, содержащиеся в элементе End , используются в сопоставлении набора сопоставлений с источником данных.
Элемент End может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Примечание.
Элементы аннотации должны следовать после всех остальных дочерних элементов. Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.
Применимые атрибуты
В следующей таблице описываются атрибуты, которые можно применять к элементу End , когда он является дочерним элементом элемента AssociationSet .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| EntitySet | Да | Имя элемента EntitySet , определяющего один конец родительского элемента AssociationSet . Элемент EntitySet должен быть определен в том же контейнере сущностей, что и родительский элемент AssociationSet . |
| Роль | Нет | Имя конца набора ассоциаций. Если атрибут Role не используется, название конца множества ассоциаций совпадет с названием множества сущностей. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу End . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EntityContainer с двумя элементами AssociationSet, каждый из которых содержит два элемента End:
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Элемент EntityContainer (CSDL)
Элемент EntityContainer в языке определения концептуальной схемы (CSDL) — это логический контейнер для наборов сущностей, наборов ассоциаций и импорта функций. Контейнер сущностей концептуальной модели сопоставляется с контейнером сущности модели хранилища с помощью элемента EntityContainerMapping. Контейнер сущностей режима хранения описывает структуру базы данных: наборы сущностей описывают таблицы, наборы ассоциаций описывают ограничения внешних ключей, функции импорта описывают хранимые процедуры в базе данных.
Элемент EntityContainer может иметь ноль или один элемент Документации. Если элемент Documentation присутствует, он должен предшествовать всем элементам EntitySet, AssociationSet и FunctionImport.
Элемент EntityContainer может иметь ноль или более следующих дочерних элементов (в указанном порядке):
- EntitySet
- AssociationSet
- FunctionImport
- Элементы аннотации
Можно расширить элемент EntityContainer, чтобы включить содержимое другого EntityContainer, которое находится в одном пространстве имен. Чтобы включить содержимое другого элемента EntityContainer, в ссылающемся элементе EntityContainer, задайте значение атрибута Extends именем элемента EntityContainer, который вы хотите включить. Все дочерние элементы включенного элемента EntityContainer будут рассматриваться как дочерние элементы элемента EntityContainer, ссылающегося на объект EntityContainer.
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу Using .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя контейнера сущностей. |
| Расширяет | Нет | Имя другого контейнера сущностей в том же пространстве имен. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу EntityContainer . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EntityContainer, определяющий три набора сущностей и два набора ассоциаций.
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Элемент EntitySet (CSDL)
Элемент EntitySet в языке определения концептуальной схемы является логическим контейнером для экземпляров типа сущности и экземпляров любого типа, производного от этого типа сущности. Связь между типом сущности и набором сущностей аналогична связи между строкой и таблицей в реляционной базе данных. Тип сущности, как и строка, определяет ряд взаимосвязанных данных, а набор сущностей, как и таблица, содержит экземпляры этого определения. Набор сущностей предоставляет конструкцию для группирования экземпляров типа сущности, чтобы их можно было сопоставлять со связанными структурами данных в источнике данных.
Можно определить больше одного набора сущностей для конкретного типа сущности.
Примечание.
Конструктор EF не поддерживает концептуальные модели, содержащие несколько наборов сущностей для каждого типа.
Элемент EntitySet может содержать следующие дочерние элементы (в указанном порядке):
- Элемент документации (ноль или один разрешенный элемент)
- Элементы заметки (ноль или больше разрешенных элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу EntitySet .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя набора сущностей. |
| EntityType | Да | Полное имя типа сущности, для которого набор сущностей содержит экземпляры. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу EntitySet . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EntityContainer с тремя элементами EntitySet :
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Предусмотрена возможность определять несколько наборов сущностей на тип (модель MEST). В следующем примере определяется контейнер сущностей с двумя наборами сущностей для типа сущности Book :
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Элемент EntityType (CSDL)
Элемент EntityType представляет структуру концепции верхнего уровня, например клиента или заказа, в концептуальной модели. Тип сущности — это шаблон для экземпляров типов сущностей в приложении. Каждый шаблон содержит следующие сведения.
- Уникальное имя. (Обязательно).
- Ключ сущности, определяемый одним или несколькими свойствами. (Обязательно).
- Свойства содержащихся данных. (Необязательно.)
- Свойства навигации, позволяющие осуществлять переход от одного элемента ассоциации к другому. (Необязательно.)
В приложении экземпляр типа сущности представляет определенный объект (например, определенного клиента или заказ). Каждый экземпляр типа сущности в наборе сущностей должен иметь уникальный ключ сущности.
Два экземпляра типа сущности считаются равными, только если они являются экземплярами одного типа и значения их ключей сущности равны.
Элемент EntityType может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Ключ (ноль или один элемент)
- Свойство (ноль или несколько элементов)
- NavigationProperty (ноль или больше элементов)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу EntityType .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя типа сущности. |
| BaseType | Нет | Имя другого типа сущности, который является базовым типом определяемого типа сущности. |
| Краткие сведения | Нет | True или False, в зависимости от того, является ли тип сущности абстрактным. |
| OpenType | Нет |
True или False, в зависимости от того, является ли тип сущности открытым. [!ПРИМЕЧАНИЕ] |
| > Атрибут OpenType применим только к типам сущностей, определенным в концептуальных моделях, используемых с ADO.NET службами данных. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу EntityType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EntityType с тремя элементами Property и двумя элементами NavigationProperty:
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Элемент EnumType (CSDL)
Элемент EnumType представляет перечислимый тип.
Элемент EnumType может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Член (ноль или несколько элементов)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу EnumType .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя типа сущности. |
| IsFlags | Нет | True или False, в зависимости от того, можно ли использовать тип перечисления в качестве набора флагов. Значением по умолчанию является False.. |
| Базовый тип | Нет | Edm.Byte, Edm.Int16, Edm.Int32, Edm.Int64 или Edm.SByte , определяющий диапазон значений типа. Базовый тип элементов перечисления по умолчанию — Edm.Int32.. |
Примечание.
Любое количество атрибутов заметки (настраиваемые атрибуты XML) может применяться к элементу EnumType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EnumType с тремя элементами Member :
<EnumType Name="Color" IsFlags=”false” UnderlyingTyp=”Edm.Byte”>
<Member Name="Red" />
<Member Name="Green" />
<Member Name="Blue" />
</EntityType>
Элемент Функция (CSDL)
Элемент Function в языке определения концептуальной схемы (CSDL) используется для определения или объявления функций в концептуальной модели. Функция определяется с помощью элемента DefiningExpression.
Элемент Function может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Параметр (ноль или несколько элементов)
- Определяющее выражение (ноль или один элемент)
- ReturnType (Function) (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Возвращаемый тип функции должен быть указан либо с помощью элемента ReturnType (Function), либо атрибута ReturnType (см. ниже), но не одновременно. Возвращаемым типом может быть EdmSimpleType, тип сущности, сложный тип, строковый тип, ссылочный тип или коллекция, которая включает один из этих типов.
Применимые атрибуты
В приведенной ниже таблице описаны атрибуты, которые можно применить к элементу Function .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя функции. |
| ReturnType | Нет | Тип, возвращаемый функцией. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Function . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере элемент Function используется для определения функции, возвращающей количество лет после найма инструктора.
<Function Name="YearsSince" ReturnType="Edm.Int32">
<Parameter Name="date" Type="Edm.DateTime" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(date)
</DefiningExpression>
</Function>
Элемент FunctionImport (CSDL)
Элемент FunctionImport в языке определения концептуальной схемы (CSDL) представляет функцию, определенную в источнике данных, но доступную для объектов с помощью концептуальной модели. Например, элемент Function в модели хранения можно использовать для представления хранимой процедуры в базе данных. Элемент FunctionImport в концептуальной модели представляет соответствующую функцию в приложении Entity Framework и сопоставляется с функцией модели хранения с помощью элемента FunctionImportMapping . При вызове функции в приложении соответствующая хранимая процедура выполняется в базе данных.
Элемент FunctionImport может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один разрешенный элемент)
- Параметр (ноль или более разрешенных элементов)
- Элементы заметки (ноль или больше разрешенных элементов)
- ReturnType (FunctionImport) (может содержать ноль или более элементов)
Для каждого параметра, который принимает функция, необходимо определить один элемент Parameter .
Тип возвращаемого значения для функции должен быть указан с помощью элемента ReturnType (FunctionImport) или атрибута ReturnType (см. ниже), но не одновременно. Возвращаемое значение типа должно быть коллекцией EdmSimpleType, EntityType или ComplexType.
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу FunctionImport .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя импортируемой функции. |
| ReturnType | Нет | Тип, возвращаемый функцией. Не используйте этот атрибут, если функция не возвращает значение. В противном случае значение должно быть коллекцией ComplexType, EntityType или EDMSimpleType. |
| EntitySet | Нет | Если функция возвращает коллекцию типов сущностей, значение EntitySet должно быть сущностью, к которой принадлежит коллекция. В противном случае атрибут EntitySet не должен использоваться. |
| IsComposable | Нет | Если для значения задано значение true, функция компонуется (функция с табличным значением) и может использоваться в запросе LINQ. Значение по умолчанию — false. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу FunctionImport . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент FunctionImport , принимаюющий один параметр и возвращающий коллекцию типов сущностей:
<FunctionImport Name="GetStudentGrades"
EntitySet="StudentGrade"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Ключевой элемент (CSDL)
Элемент Key является дочерним элементом элемента EntityType и определяет ключ сущности (свойство или набор свойств типа сущности, определяющего удостоверение). Свойства, составляющие ключ сущности, выбираются во время разработки. Значения свойств ключа сущности должны уникально определять экземпляр типа сущности внутри набора сущностей во время выполнения. Свойства, составляющие ключ сущности, должны гарантировать уникальность экземпляра набора сущностей. Элемент Key определяет ключ сущности, ссылаясь на одно или несколько свойств типа сущности.
Элемент Key может иметь следующие дочерние элементы:
- PropertyRef (один или несколько элементов)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Key . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В приведенном ниже примере определяется тип сущности с именем Book. Ключ сущности определяется ссылкой на свойство ISBN типа сущности.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Свойство ISBN является хорошим выбором для ключа сущности, так как международный номер стандартной книги (ISBN ) однозначно идентифицирует книгу.
В следующем примере показан тип сущности (Author), имеющий ключ сущности, состоящий из двух свойств, имени и адреса.
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
Использование имени и адреса для ключа сущности является разумным выбором, так как два автора одного и того же имени вряд ли будут жить по одному адресу. Однако такой выбор ключа сущности не гарантирует уникальность ключей сущности в наборе сущностей. Добавление свойства, например AuthorId, которое можно использовать для уникальной идентификации автора, рекомендуется в этом случае.
Элемент участника (CSDL)
Элемент Member является дочерним элементом элемента EnumType и определяет элемент перечисленного типа.
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу FunctionImport .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя участника. |
| Value | Нет | Значение члена. По умолчанию первый элемент имеет значение 0, а значение каждого последовательного перечислителя увеличивается на 1. Несколько членов с одинаковыми значениями могут существовать. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу FunctionImport . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EnumType с тремя элементами Member :
<EnumType Name="Color">
<Member Name="Red" Value=”1”/>
<Member Name="Green" Value=”3” />
<Member Name="Blue" Value=”5”/>
</EntityType>
Элемент NavigationProperty (CSDL)
Элемент NavigationProperty определяет свойство навигации, которое предоставляет ссылку на другую часть ассоциации. В отличие от свойств, определенных элементом Property, свойства навигации не определяют форму и характеристики данных. Они предоставляют возможность навигации по ассоциации между двумя типами сущностей.
Обратите внимание, что свойства навигации являются необязательными для обоих типов сущностей, расположенных в конечных элементах ассоциации. Если вы определили навигационное свойство для типа сущности на одном конце ассоциации, то вам необязательно определять навигационное свойство для типа сущности на другом конце ассоциации.
Тип данных, возвращаемый свойством навигации, определяется мощностью на удалённом конце ассоциации. Например, предположим, что на типе сущности Customer существует навигационное свойство OrdersNavProp, которое обеспечивает навигацию по связи "один ко многим" между Customer и Order. Так как удаленный конец связи для свойства навигации имеет множественность (*), его тип данных — это коллекция (Order). Аналогичным образом, если навигационное свойство CustomerNavProp существует в типе сущности Order, его тип данных будет Customer, так как множественность конечного узла равна единице (1).
Элемент NavigationProperty может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу NavigationProperty .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя свойства навигации. |
| Отношение | Да | Имя ассоциации, расположенной в пределах области модели. |
| ToRole | Да | Конечная точка ассоциации на которой заканчивается навигация. Значение атрибута ToRole должно совпадать со значением одного из атрибутов Role , определенных на одном из окончаний связи (определенных в элементе AssociationEnd). |
| FromRole | Да | Конечная точка ассоциации, от которой начинается навигация. Значение атрибута FromRole должно совпадать со значением одного из атрибутов Role , определенных на одном из концы связи (определенных в элементе AssociationEnd). |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу NavigationProperty . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере определяется тип сущности (Book) с двумя свойствами навигации (PublishedBy и WrittenBy):
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
Элемент OnDelete (CSDL)
Элемент OnDelete в языке определения концептуальной схемы (CSDL) определяет поведение, связанное с ассоциацией. Если атрибут Action имеет значение Cascade в одной части ассоциации, связанные типы сущностей в другом конце ассоциации удаляются при удалении типа сущности в первом конце. Если связь между двумя типами сущностей является связью первичного ключа к первичному ключу, то загруженный зависимый объект удаляется при удалении основного объекта в другой части ассоциации независимо от спецификации OnDelete .
Примечание.
Элемент OnDelete влияет только на поведение среды выполнения приложения; он не влияет на поведение в источнике данных. Поведение, определенное в источнике данных, должно совпадать с поведением, определенным для приложения.
Элемент OnDelete может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу OnDelete .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Действие | Да | Каскад или нет. Если Каскад, зависимые типы сущностей будут удалены при удалении типа основной сущности. Если нет, зависимые типы сущностей не будут удалены при удалении основного типа сущности. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Association . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент Association, определяющий ассоциацию CustomerOrders. Элемент OnDelete указывает, что все заказы , связанные с определенным клиентом и загруженные в ObjectContext, будут удалены при удалении клиента .
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer" Role="Customer" Multiplicity="1">
<OnDelete Action="Cascade" />
</End>
<End Type="ExampleModel.Order" Role="Order" Multiplicity="*" />
</Association>
Элемент параметра (CSDL)
Элемент Parameter в языке определения концептуальной схемы (CSDL) может быть дочерним элементом элемента FunctionImport или элементом Function.
Приложение, использующее элемент FunctionImport
Элемент Parameter (в качестве дочернего элемента FunctionImport) используется для определения входных и выходных параметров для импорта функций, объявленных в CSDL.
Элемент Parameter может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один разрешенный элемент)
- Элементы заметки (ноль или больше разрешенных элементов)
Применимые атрибуты
В следующей таблице описаны атрибуты, которые можно применить к элементу Parameter .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя параметра. |
| Тип | Да | Тип параметра. Значение должно быть EDMSimpleType или сложным типом, который входит в область модели. |
| Режим | Нет | In, Out или InOut в зависимости от того, является ли параметр входным, выходным или выходным параметром. |
| MaxLength | Нет | Максимально допустимая длина параметра. |
| Точность | Нет | Точность параметра. |
| Масштабировать | Нет | Масштаб параметра. |
| SRID | Нет | Идентификатор пространственной системы. Допустимо только для параметров пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server). |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Parameter . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент FunctionImport с одним дочерним элементом Parameter. Функция принимает один входной параметр и возвращает коллекцию типов сущностей.
<FunctionImport Name="GetStudentGrades"
EntitySet="StudentGrade"
ReturnType="Collection(SchoolModel.StudentGrade)">
<Parameter Name="StudentID" Mode="In" Type="Int32" />
</FunctionImport>
Применение элемента функции
Элемент Parameter (как дочерний элемент функции) определяет параметры для функций, определенных или объявленных в концептуальной модели.
Элемент Parameter может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- CollectionType (ноль или один элемент)
- ReferenceType (ноль или один элемент)
- RowType (ноль или один элемент)
Примечание.
Только один из элементов CollectionType, ReferenceType или RowType может быть дочерним элементом элемента Property.
- Элементы заметки (ноль или больше разрешенных элементов)
Примечание.
Элементы аннотации должны следовать после всех остальных дочерних элементов. Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.
Применимые атрибуты
В следующей таблице описаны атрибуты, которые можно применить к элементу Parameter .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя параметра. |
| Тип | Нет | Тип параметра. Параметр может быть любым из следующих типов (или коллекций этих типов): EdmSimpleType Тип сущности сложный тип Тип строки ссылочный тип |
| Nullable | Нет | True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение NULL . |
| DefaultValue | Нет | Значение по умолчанию для свойства. |
| MaxLength | Нет | Максимальная длина значения свойства. |
| FixedLength | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка фиксированной длины. |
| Точность | Нет | Точность значения свойства. |
| Масштабировать | Нет | Масштаб значения свойства. |
| SRID | Нет | Идентификатор пространственной системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server). |
| Юникод | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка Юникода. |
| Колляция | Нет | Строка, указывающая порядок сортировки, используемый в источнике данных. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Parameter . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент Function, использующий один дочерний элемент Parameter для определения параметра функции.
<Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
<Parameter Name="Instructor" Type="SchoolModel.Person" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
</DefiningExpression>
</Function>
Элемент Principal (CSDL)
Основной элемент в языке определения концептуальной схемы (CSDL) является дочерним элементом элемента ReferentialConstraint, который определяет основной конец ссылочного ограничения. Элемент ReferentialConstraint определяет функциональные возможности, аналогичные ограничению целостности ссылки в реляционной базе данных. Свойство (или свойства) типа сущности могут ссылаться на ключ сущности в другом типе сущности также, как столбец (или столбцы) в таблице базы данных могут ссылаться на первичный ключ другой таблицы. Тип сущности, на который ссылается ссылка, называется основным концом ограничения. Тип сущности, ссылающийся на основной конец, называется зависимым концом ограничения. Элементы PropertyRef используются для указания ключей, на которые ссылается зависимый конец.
Элемент Principal может содержать следующие дочерние элементы (в указанном порядке):
- PropertyRef (один или несколько элементов)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу Principal .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Роль | Да | Имя типа сущности на главном конце ассоциации. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Principal . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент ReferentialConstraint который является частью определения ассоциации PublishedBy. Свойство Id типа сущности Publisher представляет основную часть ссылочного ограничения.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Элемент Property (CSDL)
Элемент Property в языке определения концептуальной схемы (CSDL) может быть дочерним элементом EntityType, элементом ComplexType или элементом RowType.
Применение элементов EntityType и ComplexType
Элементы свойств (как дочерние элементы EntityType или ComplexType) определяют форму и характеристики данных, которые будет содержать экземпляр типа сущности или экземпляр сложного типа. Свойства в концептуальной модели аналогичны свойствам, которые определены в классе. По такому же принципу, как свойства, относящиеся к классу, определяют форму класса и несут информацию об объектах, свойства в концептуальной модели определяют форму типа сущности и несут информацию об экземплярах типа сущности.
Элемент Property может содержать следующие дочерние элементы (в указанном порядке):
- Элемент документации (ноль или один разрешенный элемент)
- Элементы заметки (ноль или больше разрешенных элементов)
К элементу Property можно применять следующие аспекты: Nullable, DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode, Collation, ConcurrencyMode. Аспекты представляют собой атрибуты XML, которые предоставляют сведения о том, как значения свойств хранятся в хранилище данных.
Примечание.
Аспекты можно применять только к свойствам типа EDMSimpleType.
Применимые атрибуты
В следующей таблице описываются атрибуты, которые можно применить к элементу Property .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя свойства. |
| Тип | Да | Тип значения свойства. Тип значения свойства должен быть EDMSimpleType или сложным типом, определяемым полным именем, который находится в рамках модели. |
| Nullable | Нет |
True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null. [!ПРИМЕЧАНИЕ] |
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа. |
||
| DefaultValue | Нет | Значение по умолчанию для свойства. |
| MaxLength | Нет | Максимальная длина значения свойства. |
| FixedLength | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка фиксированной длины. |
| Точность | Нет | Точность значения свойства. |
| Масштабировать | Нет | Масштаб значения свойства. |
| SRID | Нет | Идентификатор пространственной системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server). |
| Юникод | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка Юникода. |
| Колляция | Нет | Строка, указывающая порядок сортировки, используемый в источнике данных. |
| ConcurrencyMode | Нет | None (значение по умолчанию) или Fixed. Если задано значение Fixed, значение свойства будет использоваться при выполнении проверок оптимистичного параллелизма. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Property . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент EntityType с тремя элементами Property :
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
В следующем примере показан элемент ComplexType с пятью элементами Property:
<ComplexType Name="Address" >
<Property Type="String" Name="StreetAddress" Nullable="false" />
<Property Type="String" Name="City" Nullable="false" />
<Property Type="String" Name="StateOrProvince" Nullable="false" />
<Property Type="String" Name="Country" Nullable="false" />
<Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>
Применение элемента RowType
Элементы свойств (как дочерние элементы элемента RowType ) определяют форму и характеристики данных, которые могут передаваться или возвращаться из определяемой моделью функции.
Элемент Property может иметь ровно один из следующих дочерних элементов:
- ТипКоллекции
- Тип ссылки
- ТипСтроки
Элемент Property может содержать любое количество дочерних элементов аннотации.
Примечание.
Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.
Применимые атрибуты
В следующей таблице описываются атрибуты, которые можно применить к элементу Property .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя свойства. |
| Тип | Да | Тип значения свойства. |
| Nullable | Нет |
True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null. [!ПРИМЕЧАНИЕ] |
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа. |
||
| DefaultValue | Нет | Значение по умолчанию для свойства. |
| MaxLength | Нет | Максимальная длина значения свойства. |
| FixedLength | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка фиксированной длины. |
| Точность | Нет | Точность значения свойства. |
| Масштабировать | Нет | Масштаб значения свойства. |
| SRID | Нет | Идентификатор пространственной системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server). |
| Юникод | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка Юникода. |
| Колляция | Нет | Строка, указывающая порядок сортировки, используемый в источнике данных. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Property . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показаны элементы свойства , используемые для определения формы возвращаемого типа определяемой моделью функции.
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
Элемент PropertyRef (CSDL)
Элемент PropertyRef в языке определения концептуальной схемы (CSDL) ссылается на свойство типа сущности, указывающее, что свойство будет выполнять одну из следующих ролей:
- Часть ключа сущности (является свойством или набором свойств типа сущности, которые определяют идентификатор). Для определения ключа сущности можно использовать один или несколько элементов PropertyRef .
- Зависимый или основной конец ссылочного ограничения.
Элемент PropertyRef может содержать только элементы заметки (ноль или более) в качестве дочерних элементов.
Примечание.
Элементы заметки разрешены только в CSDL версии 2 и более поздних версиях.
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу PropertyRef .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Имя | Да | Имя свойства, на которое дается ссылка. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу PropertyRef . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В приведенном ниже примере определяется тип сущности (Книга). Ключ сущности определяется ссылкой на свойство ISBN типа сущности.
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
В следующем примере два элемента PropertyRef используются для указания того, что два свойства (Id и PublisherId) являются основными и зависимыми концами ссылочного ограничения.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Элемент ReferenceType (CSDL)
Элемент ReferenceType в языке определения концептуальной схемы (CSDL) указывает ссылку на тип сущности. Элемент ReferenceType может быть дочерним элементом следующих элементов:
- ReturnType (Function)
- Параметр
- ТипКоллекции
Элемент ReferenceType используется при определении параметра или возвращаемого типа для функции.
Элемент ReferenceType может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу ReferenceType .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Тип | Да | Имя типа сущности, на который делается ссылка. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу ReferenceType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент ReferenceType , используемый в качестве дочернего элемента Parameter в определяемой моделью функции, которая принимает ссылку на тип сущности Person :
<Function Name="GetYearsEmployed" ReturnType="Edm.Int32">
<Parameter Name="instructor">
<ReferenceType Type="SchoolModel.Person" />
</Parameter>
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
</DefiningExpression>
</Function>
В следующем примере показан элемент ReferenceType, используемый в качестве дочернего элемента ReturnType (Function) в определяемой моделью функции, которая возвращает ссылку на тип сущности Person:
<Function Name="GetPersonReference">
<Parameter Name="p" Type="SchoolModel.Person" />
<ReturnType>
<ReferenceType Type="SchoolModel.Person" />
</ReturnType>
<DefiningExpression>
REF(p)
</DefiningExpression>
</Function>
Элемент Ссылочное ограничение (CSDL)
Элемент ReferentialConstraint в языке определения концептуальной схемы (CSDL) определяет функциональные возможности, аналогичные ограничению целостности ссылок в реляционной базе данных. Свойство (или свойства) типа сущности могут ссылаться на ключ сущности в другом типе сущности также, как столбец (или столбцы) в таблице базы данных могут ссылаться на первичный ключ другой таблицы. Тип сущности, на который ссылается ссылка, называется основным концом ограничения. Тип сущности, ссылающийся на основной конец, называется зависимым концом ограничения.
Если внешний ключ, предоставляемый в одном типе сущности, ссылается на свойство другого типа сущности, элемент ReferentialConstraint определяет связь между двумя типами сущностей. Так как элемент ReferentialConstraint содержит сведения о том, как связаны два типа сущностей, соответствующий элемент AssociationSetMapping не требуется в языке спецификации сопоставления (MSL). Связь между двумя типами сущностей, у которых нет внешних ключей, должна иметь соответствующий элемент AssociationSetMapping , чтобы сопоставить сведения об ассоциации с источником данных.
Если внешний ключ не предоставляется в типе сущности, элемент ReferentialConstraint может определить только ограничение первичного ключа к первичному ключу между типом сущности и другим типом сущности.
Элемент ReferentialConstraint может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Субъект (ровно один элемент)
- Зависимый (ровно один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
Элемент ReferentialConstraint может иметь любое количество атрибутов заметки (пользовательские XML-атрибуты). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент ReferentialConstraint, используемый в контексте определения ассоциации PublishedBy.
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" >
</End>
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
<ReferentialConstraint>
<Principal Role="Publisher">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="Book">
<PropertyRef Name="PublisherId" />
</Dependent>
</ReferentialConstraint>
</Association>
Элемент ReturnType (Function) (CSDL)
Элемент ReturnType (Function) в языке определения концептуальной схемы (CSDL) задает тип возврата для функции, определенной в элементе Function. Возвращаемый тип функции также можно указать атрибутом ReturnType .
Возвращаемые типы могут быть любой EdmSimpleType, типом сущности, сложным типом, типом ряда, ссылочным типом или коллекцией одного из этих типов.
Можно задать возвращаемый тип функции с помощью атрибута Type элемента ReturnType (Function) или одного из следующих дочерних элементов:
- ТипКоллекции
- Тип ссылки
- ТипСтроки
Примечание.
Модель не будет проверена, если вы укажете тип возвращаемой функции как атрибут Type элемента ReturnType (Function) и как один из дочерних элементов.
Применимые атрибуты
В следующей таблице описываются атрибуты, которые можно применить к элементу ReturnType (Function).
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| ReturnType | Нет | Тип, возвращаемый функцией. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу ReturnType (Function). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере элемент Function используется для определения функции, возвращающей количество лет книги в печати. Обратите внимание, что возвращаемый тип указывается атрибутом Type элемента ReturnType (Function).
<Function Name="GetYearsInPrint">
<ReturnType Type=="Edm.Int32">
<Parameter Name="book" Type="BooksModel.Book" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression>
</Function>
Элемент ReturnType (FunctionImport) (CSDL)
Элемент ReturnType (FunctionImport) в языке определения концептуальной схемы (CSDL) задает тип возвращаемой функции, определенной в элементе FunctionImport. Возвращаемый тип функции также можно указать атрибутом ReturnType .
Возвращаемые типы могут быть любой коллекцией типов сущностей, сложного типа или EdmSimpleType,
Возвращаемый тип функции указывается атрибутом Type элемента ReturnType (FunctionImport).
Применимые атрибуты
В следующей таблице описаны атрибуты, которые можно применить к элементу ReturnType (FunctionImport).
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Тип | Нет | Тип, возвращаемый функцией. Значение должно быть определённой коллекцией ComplexType, EntityType или EDMSimpleType. |
| EntitySet | Нет | Если функция возвращает коллекцию типов сущностей, значение EntitySet должно быть сущностью, к которой принадлежит коллекция. В противном случае атрибут EntitySet не должен использоваться. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу ReturnType (FunctionImport). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере используется FunctionImport, который возвращает книги и их издателей. Обратите внимание, что функция возвращает два результирующих набора, поэтому указаны два элемента ReturnType (FunctionImport).
<FunctionImport Name="GetBooksAndPublishers">
<ReturnType Type=="Collection(BooksModel.Book )" EntitySet=”Books”>
<ReturnType Type=="Collection(BooksModel.Publisher)" EntitySet=”Publishers”>
</FunctionImport>
Элемент RowType (язык CSDL)
Элемент RowType в языке определения концептуальной схемы (CSDL) определяет неименованную структуру в качестве параметра или возвращаемого типа для функции, определенной в концептуальной модели.
Элемент RowType может быть дочерним элементом следующих элементов:
- ТипКоллекции
- Параметр
- ReturnType (Function)
Элемент RowType может содержать следующие дочерние элементы (в указанном порядке):
- Свойства (одно или несколько)
- Элементы заметки (ноль или больше)
Применимые атрибуты
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу RowType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показана определяемая моделью функция, использующая элемент CollectionType , чтобы указать, что функция возвращает коллекцию строк (как указано в элементе RowType ).
<Function Name="LastNamesAfter">
<Parameter Name="someString" Type="Edm.String" />
<ReturnType>
<CollectionType>
<RowType>
<Property Name="FirstName" Type="Edm.String" Nullable="false" />
<Property Name="LastName" Type="Edm.String" Nullable="false" />
</RowType>
</CollectionType>
</ReturnType>
<DefiningExpression>
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression>
</Function>
Элемент схемы (CSDL)
Элемент Schema является корневым элементом определения концептуальной модели. Он содержит определения объектов, функций и контейнеров, из которых состоит концептуальная модель.
Элемент Schema может содержать ноль или более следующих дочерних элементов:
- Использование
- EntityContainer
- ТипСущности
- EnumType
- Ассоциация
- КомплексныйТип
- Функция
Элемент Schema может содержать ноль или один элемент Заметки.
Примечание.
Элементы function и заметки разрешены только в CSDL версии 2 и более поздних версиях.
Элемент Schema использует атрибут пространства имен для определения пространства имен для типа сущности, сложного типа и объектов ассоциаций в концептуальной модели. В пространстве имен не может быть двух объектов с одинаковым именем. Пространства имен могут охватывать несколько Schema элементов и несколько .csdl файлов.
Концептуальное пространство имен модели отличается от пространства имен XML элемента Schema . Концептуальное пространство имен модели (как определено атрибутом пространство имен) — это логический контейнер для типов сущностей, сложных типов и типов связей. Пространство имен XML (указанное атрибутом xmlns ) элемента Schema — это пространство имен по умолчанию для дочерних элементов и атрибутов элемента Schema . Пространства имен XML формы https://schemas.microsoft.com/ado/YYYY/MM/edm (где ггГГ и ММ представляют год и месяц соответственно) зарезервированы для CSDL. Пользовательские элементы и атрибуты не могут присутствовать в пространствах имен такого вида.
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу Schema .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Пространство имен | Да | Пространство имен концептуальной модели. Значение атрибута Namespace используется для формирования полного имени типа. Например, если объект EntityType с именем Customer находится в пространстве имен Simple.Example.Model, то полное имя EntityType — SimpleExampleModel.Customer. Следующие строки нельзя использовать в качестве значения атрибута Namespace: System, Transient или Edm. Значение атрибута пространства имен не может совпадать со значением атрибута пространства имен в элементе схемы SSDL. |
| Alias | Нет | Идентификатор, используемый в качестве имени пространства имен. Например, если EntityType с именем Customer находится в пространстве имен Simple.Example.Model, а значение атрибута Alias — Model, можно использовать Model.Customer в качестве полного имени EntityType. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Schema . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показан элемент Schema , содержащий элемент EntityContainer , два элемента EntityType и один элемент Association .
<Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace="ExampleModel" Alias="Self">
<EntityContainer Name="ExampleModelContainer">
<EntitySet Name="Customers"
EntityType="ExampleModel.Customer" />
<EntitySet Name="Orders" EntityType="ExampleModel.Order" />
<AssociationSet
Name="CustomerOrder"
Association="ExampleModel.CustomerOrders">
<End Role="Customer" EntitySet="Customers" />
<End Role="Order" EntitySet="Orders" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Type="Int32" Name="CustomerId" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<NavigationProperty
Name="Orders"
Relationship="ExampleModel.CustomerOrders"
FromRole="Customer" ToRole="Order" />
</EntityType>
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Type="Int32" Name="OrderId" Nullable="false" />
<Property Type="Int32" Name="ProductId" Nullable="false" />
<Property Type="Int32" Name="Quantity" Nullable="false" />
<NavigationProperty
Name="Customer"
Relationship="ExampleModel.CustomerOrders"
FromRole="Order" ToRole="Customer" />
<Property Type="Int32" Name="CustomerId" Nullable="false" />
</EntityType>
<Association Name="CustomerOrders">
<End Type="ExampleModel.Customer"
Role="Customer" Multiplicity="1" />
<End Type="ExampleModel.Order"
Role="Order" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Customer">
<PropertyRef Name="CustomerId" />
</Principal>
<Dependent Role="Order">
<PropertyRef Name="CustomerId" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
Элемент TypeRef (CSDL)
Элемент TypeRef в языке определения концептуальной схемы (CSDL) предоставляет ссылку на существующий именованный тип. Элемент TypeRef может быть дочерним элементом элемента CollectionType, который используется для указания того, что функция имеет коллекцию в качестве параметра или возвращаемого типа.
Элемент TypeRef может содержать следующие дочерние элементы (в указанном порядке):
- Документация (ноль или один элемент)
- Элементы заметки (ноль или больше элементов)
Применимые атрибуты
В следующей таблице описываются атрибуты, которые можно применить к элементу TypeRef . Обратите внимание, что атрибуты DefaultValue, MaxLength, FixedLength, Precision, Scale, Unicode и Collation применимы только к EDMSimpleTypes.
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Тип | Нет | Имя типа, на который дается ссылка. |
| Nullable | Нет |
True (значение по умолчанию) или False в зависимости от того, может ли свойство иметь значение null. [!ПРИМЕЧАНИЕ] |
> В CSDL версии 1 необходимо иметь Nullable="False"свойство сложного типа. |
||
| DefaultValue | Нет | Значение по умолчанию для свойства. |
| MaxLength | Нет | Максимальная длина значения свойства. |
| FixedLength | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка фиксированной длины. |
| Точность | Нет | Точность значения свойства. |
| Масштабировать | Нет | Масштаб значения свойства. |
| SRID | Нет | Идентификатор пространственной системы. Допустимо только для свойств пространственных типов. Дополнительные сведения см. в статье SRID и SRID (SQL Server). |
| Юникод | Нет | True или False в зависимости от того, будет ли значение свойства храниться как строка Юникода. |
| Колляция | Нет | Строка, указывающая порядок сортировки, используемый в источнике данных. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу CollectionType . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показана определяемая моделью функция, которая использует элемент TypeRef (в качестве дочернего элемента CollectionType), чтобы указать, что функция принимает коллекцию типов сущностей Department.
<Function Name="GetAvgBudget">
<Parameter Name="Departments">
<CollectionType>
<TypeRef Type="SchoolModel.Department"/>
</CollectionType>
</Parameter>
<ReturnType Type="Collection(Edm.Decimal)"/>
<DefiningExpression>
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression>
</Function>
Элемент "Использование" (CSDL)
Элемент Using в языке определения концептуальной схемы (CSDL) импортирует содержимое концептуальной модели, которая существует в другом пространстве имен. Задав значение атрибута Namespace, можно ссылаться на типы сущностей, сложные типы и типы ассоциаций, определенные в другой концептуальной модели. Несколько элементов Using могут быть дочерним элементом элемента Schema.
Примечание.
Элемент Using в CSDL не работает точно так же, как инструкция using в языке программирования. При использовании инструкции using для импорта пространства имен в языке программирования, вы не влияете на объекты в исходном пространстве имен. В языке CSDL импортированное пространство имен может содержать тип сущности, производный от типа сущности в исходном пространстве имен. Это может влиять на наборы сущностей, объявленные в исходном пространстве имен.
Элемент Using может иметь следующие дочерние элементы:
- Документация (ноль или один разрешенный элемент)
- Элементы заметки (ноль или больше разрешенных элементов)
Применимые атрибуты
В таблице ниже описаны атрибуты, которые можно применить к элементу Using .
| Имя атрибута | является обязательным | Значение |
|---|---|---|
| Пространство имен | Да | Имя импортируемого пространства имен. |
| Alias | Да | Идентификатор, используемый в качестве имени пространства имен. Хотя этот атрибут является обязательным, необязательно, чтобы он использовался вместо имени пространства имен при указании имен объектов. |
Примечание.
Любое количество атрибутов заметки (настраиваемые XML-атрибуты) может применяться к элементу Using . Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL. Полные имена любых двух настраиваемых атрибутов не могут совпадать.
Пример
В следующем примере показано, как использовать элемент Using для импорта пространства имен, определенного в другом месте. Обратите внимание, что пространство имен для элемента Schema показано как BooksModel. Свойство AddressPublisherEntityType — это сложный тип, определенный в ExtendedBooksModel пространстве имен (импортированный с помощью элемента Using ).
<Schema xmlns="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<Using Namespace="BooksModel.Extended" Alias="BMExt" />
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
</EntityContainer>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="BMExt.Address" Name="Address" Nullable="false" />
</EntityType>
</Schema>
Атрибуты примечаний (CSDL)
Атрибуты annotation в языке CSDL представляют собой настраиваемые атрибуты XML в концептуальной модели. Атрибуты annotation должны не только иметь допустимую структуру XML, но и соответствовать следующим требованиям:
- Атрибуты annotation не должны находиться ни в одном пространстве имен XML, которое зарезервировано для языка CSDL.
- К данному конкретному элементу языка CSDL может применяться несколько атрибутов annotation.
- Полные имена двух атрибутов аннотаций не должны совпадать.
Атрибуты annotation могут использоваться для предоставления дополнительных метаданных об элементах в концептуальной модели. Метаданные, содержащиеся в элементах заметки, можно получить во время выполнения с помощью классов в пространстве имен System.Data.Metadata.Edm.
Пример
В следующем примере показан элемент EntityType с атрибутом заметки (CustomAttribute). В примере также показано применение элемента аннотации к элементу типа сущности.
<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)
Элементы аннотации в языке определения концептуальных схем (CSDL) представляют собой пользовательские элементы XML в концептуальной модели. Элементы annotation должны не только иметь допустимую структуру XML, но и соответствовать следующим требованиям:
- Элементы annotation не должны находиться в каком-либо пространстве имен XML, которое зарезервировано для языка CSDL.
- У данного элемента языка CSDL может быть более одного дочернего элемента аннотации.
- Полностью квалифицированные имена любых двух элементов аннотации не должны совпадать.
- Элементы аннотации должны находиться после всех остальных дочерних элементов в данном элементе CSDL.
Элементы annotation могут использоваться для предоставления дополнительных метаданных об элементах в концептуальной модели. Начиная с платформы .NET Framework версии 4, метаданные, содержащиеся в элементах аннотации, можно получить во время выполнения с помощью классов в пространстве имен System.Data.Metadata.Edm.
Пример
В следующем примере показан элемент EntityType с элементом заметки (CustomElement). Пример также показывает атрибут аннотации, применённый к элементу типа сущности.
<Schema Namespace="SchoolModel" Alias="Self"
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns="https://schemas.microsoft.com/ado/2009/11/edm">
<EntityContainer Name="SchoolEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="People" EntityType="SchoolModel.Person" />
</EntityContainer>
<EntityType Name="Person" xmlns:p="http://CustomNamespace.com"
p:CustomAttribute="Data here.">
<Key>
<PropertyRef Name="PersonID" />
</Key>
<Property Name="PersonID" Type="Int32" Nullable="false"
annotation:StoreGeneratedPattern="Identity" />
<Property Name="LastName" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="FirstName" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="HireDate" Type="DateTime" />
<Property Name="EnrollmentDate" Type="DateTime" />
<p:CustomElement>
Custom metadata.
</p:CustomElement>
</EntityType>
</Schema>
Следующий код извлекает метаданные из элемента annotation и выводит их на консоль.
EdmItemCollection collection = new EdmItemCollection("School.csdl");
MetadataWorkspace workspace = new MetadataWorkspace();
workspace.RegisterItemCollection(collection);
EdmType contentType;
workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement"))
{
MetadataProperty annotationProperty =
contentType.MetadataProperties["http://CustomNamespace.com:CustomElement"];
object annotationValue = annotationProperty.Value;
Console.WriteLine(annotationValue.ToString());
}
Вышеприведенный код предполагает, что файл School.csdl находится в выходном каталоге проекта, а в проект добавлены инструкции Imports и Using.
using System.Data.Metadata.Edm;
Типы концептуальной модели (CSDL)
Язык определения концептуальной схемы (CSDL) поддерживает набор абстрактных примитивных типов данных, называемых EDMSimpleTypes, которые определяют свойства в концептуальной модели. EDMSimpleTypes — это прокси-серверы для примитивных типов данных, поддерживаемых в хранилище или среде размещения.
В приведенной ниже таблице представлены примитивные типы данных, поддерживаемые CSDL. В таблице также перечислены аспекты, которые можно применить к каждому EDMSimpleType.
| EDMSimpleType | Описание | Применимые аспекты |
|---|---|---|
| Edm.Binary | Содержит двоичные данные. | MaxLength (максимальная длина), FixedLength (фиксированная длина), Nullable (может быть пустым), Default (по умолчанию) |
| Edm.Boolean | Содержит значение true или false. | Может принимать значение NULL, значение по умолчанию |
| Edm.Byte | Содержит 8-битное целое значение без знака. | Точность, Nullable, значение по умолчанию |
| Edm.DateTime | Представляет дату и время. | Точность, Nullable, значение по умолчанию |
| Edm.DateTimeOffset | Содержит дату и время как смещение в минутах от времени по Гринвичу. | Точность, Nullable, значение по умолчанию |
| Edm.Decimal | Содержит числовое значение с фиксированной точностью и разрядностью. | Точность, Nullable, значение по умолчанию |
| Edm.Double | Содержит число с плавающей запятой с точностью 15 цифр | Точность, Nullable, значение по умолчанию |
| Edm.Float | Содержит число с плавающей запятой с точностью до 7 знаков. | Точность, Nullable, значение по умолчанию |
| Edm.Guid | Содержит уникальный 16-битный идентификатор. | Точность, Nullable, значение по умолчанию |
| Edm.Int16 | Содержит 16-разрядное целое значение со знаком. | Точность, Nullable, значение по умолчанию |
| Edm.Int32 | Содержит 32-разрядное целое число со знаком. | Точность, Nullable, значение по умолчанию |
| Edm.Int64 | Содержит 64-битное целое число со знаком. | Точность, Nullable, значение по умолчанию |
| Edm.SByte | Содержит 8-разрядное целое значение со знаком. | Точность, Nullable, значение по умолчанию |
| Edm.String | Содержит символьные данные. | Юникод, Фиксированная длина, Максимальная длина, Параметры сортировки, Точность, Допускает значение NULL, По умолчанию |
| Edm.Time | Содержит время дня. | Точность, Nullable, значение по умолчанию |
| Edm.Geography | Допускающий значение NULL, по умолчанию, SRID | |
| Edm.GeographyPoint | Может быть NULL, по умолчанию, SRID | |
| Edm.GeographyLineString | Может быть NULL, по умолчанию, SRID | |
| Edm.GeographyPolygon | Может быть NULL, по умолчанию, SRID | |
| Edm.GeographyMultiPoint | Может быть NULL, по умолчанию, SRID | |
| Edm.GeographyMultiLineString | Может быть NULL, по умолчанию, SRID | |
| Edm.GeographyMultiPolygon | Может быть NULL, по умолчанию, SRID | |
| Edm.GeographyCollection | Может быть NULL, по умолчанию, SRID | |
| Edm.Geometry | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryPoint | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryLineString | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryPolygon | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryMultiPoint | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryMultiLineString | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryMultiPolygon | Может быть NULL, по умолчанию, SRID | |
| Edm.GeometryCollection | Может быть NULL, по умолчанию, SRID |
Аспекты (CSDL)
Аспекты в языке CSDL представляют ограничения для свойств сущностных и сложных типов. Аспекты выглядят как XML-атрибуты в следующих элементах CSDL:
- Свойство
- TypeRef
- Параметр
В следующей таблице описываются аспекты, поддерживаемые в CSDL. Все аспекты являются необязательными. Некоторые аспекты, перечисленные ниже, используются Entity Framework при создании базы данных из концептуальной модели.
Примечание.
Сведения о типах данных в концептуальной модели см. в разделе "Концептуальные типы моделей" (CSDL).
| Аспект | Описание | Применяется к | Используется для создания базы данных | Используется средой выполнения |
|---|---|---|---|---|
| Колляция | Задает последовательность сортировки, которая будет использоваться при выполнении операций сравнения и упорядочивания для значений свойств. | Edm.String | Да | Нет |
| ConcurrencyMode | Указывает, что значение свойства следует использовать для проверки оптимистичного контроля параллелизма. | Все свойства EDMSimpleType | Нет | Да |
| По умолчанию | Задает значение по умолчанию для свойства в случае, если при инстанцировании не было задано значение. | Все свойства EDMSimpleType | Да | Да |
| FixedLength | Указывает, может ли изменяться длина значения свойства. | Edm.Binary, Edm.String | Да | Нет |
| MaxLength | Указывает максимальную длину значения свойства. | Edm.Binary, Edm.String | Да | Нет |
| Nullable | Указывает, может ли свойство иметь значение NULL . | Все свойства EDMSimpleType | Да | Да |
| Точность | Для свойств типа Decimal указывает число цифр, которые могут иметь значение свойства. Для свойств типа Time, DateTime и DateTimeOffset указывает количество цифр для дробной части секунд значения свойства. | Edm.DateTime, Edm.DateTimeOffset, Edm.Decimal, Edm.Time | Да | Нет |
| Масштабировать | Указывает количество десятичных знаков после запятой в значении свойства. | Edm.Decimal | Да | Нет |
| SRID | Указывает идентификатор системы пространственных координат. Дополнительные сведения см. в статье SRID и SRID (SQL Server). | Edm.Geography, Edm.GeographyPoint, Edm.GeographyLineString, Edm.GeographyPolygon, Edm.GeographyMultiPoint, Edm.GeographyMultiLineString, Edm.GeographyMultiPolygon, Edm.GeographyCollection, Edm.Geometry, Edm.GeometryPoint, Edm.GeometryLineString, Edm.GeometryPolygon, Edm.GeometryMultiPoint, Edm.GeometryMultiLineString, Edm.GeometryMultiPolygon, Edm.GeometryCollection | Нет | Да |
| Юникод | Указывает, будет ли значение свойства храниться в Юникоде. | Edm.String | Да | Да |
Примечание.
При создании базы данных из концептуальной модели мастер создания базы данных распознает значение атрибута StoreGeneratedPattern в элементе Property, если он находится в следующем пространстве имен. https://schemas.microsoft.com/ado/2009/02/edm/annotation Поддерживаемые значения атрибута — Identity и Computed. Значение Identity создаст столбец базы данных с идентификаторным значением, которое генерируется в базе данных. Значение Computed создаст столбец со значением, которое вычисляется в базе данных.
Пример
В следующем примере показывается применение аспектов к свойствам типа сущности:
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductId" />
</Key>
<Property Type="Int32"
Name="ProductId" Nullable="false"
a:StoreGeneratedPattern="Identity"
xmlns:a="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
<Property Type="String"
Name="ProductName"
Nullable="false"
MaxLength="50" />
<Property Type="String"
Name="Location"
Nullable="true"
MaxLength="25" />
</EntityType>