Расширенное свойство (язык CSDL)
В модели EDM расширенным является свойство, которое было определено и существует в пространстве имен пользователя, а не в системном пространстве имен xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
. Для определения обоих видов свойств используется язык CSDL. Чтобы добавить расширенное свойство в CSDL-схему, определите пространство имен, а затем используйте его в определении типа сущности и соответствующем ему наборе сущностей.
В следующем примере определяется пространство имен xmlns:o1="http://other.contoso.com/schema"
. Префикс пространства имен: В определениях типа сущности AWBuildVersion и набора сущностей AWBuildVersions o1
служит псевдонимом.
<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="AdventureWorksModel" Alias="Self"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns:o1="http://other.contoso.com/schema">
<EntityContainer Name="AdventureWorksEntities"
o1:MyCustomAttribute="MyCustomAttributeValue">
<EntitySet Name="AWBuildVersions"
EntityType="Adventureworks.AWBuildVersion"
o1:AnotherAttribute="AnotherAttributeValue"/>
</EntityContainer>
…...
<EntityType Name="AWBuildVersion">
<Key>
<PropertyRef Name="SystemInformationID" />
</Key>
<Property Name="SystemInformationID"
Type="Byte" Nullable="false" />
<Property Name="Database_Version" Type="String"
Nullable="false" />
<Property Name="VersionDate"
Type="DateTime" Nullable="false" />
<Property Name="ModifiedDate"
Type="DateTime" Nullable="false" />
</EntityType>
PropertyKind — это перечисление, основанное на объектах MetadataProperty, которое может быть использовано для идентификации системных свойств и расширенных свойств в модели EDM. Пример использования этого перечисления в коде см. в разделе Использование модели объектов AdventureWorks (модель EDM).
Выполнение кода, в котором используются расширенные свойства
Изменения схемы с использованием расширенных свойств можно проверить при помощи модели данных и кода приложения, приведенных в разделе Полная модель AdventureWorks (модель EDM). Внесите изменения в схему csdl и повторно создайте модель объектов при помощи программы Edmgen.exe, как описано в разделе AdventureWorks.
Затем в клиентское приложение, приведенное в разделе Использование модели объектов AdventureWorks (модель EDM), добавьте следующий код. Эти методы необходимо добавить в класс Program
и вызвать из кода в комментарии, который ссылается на функцию DisplayProperties
.
public static void DisplayProperties(
MetadataWorkspace workspace, DataSpace model)
{
// Get a collection of the entity containers.
ReadOnlyCollection<EntityContainer> containers =
workspace.GetItems<EntityContainer>(model);
// Iterate through collection to get each entity container.
foreach (EntityContainer container in containers)
{
// Display extended properties for the entity container.
DisplayExtendedProperties(container);
// Iterate through collection to get each entity set.
foreach (EntitySetBase baseSet in container.BaseEntitySets)
{
// Check if this instance is an EntitySet.
if (baseSet is EntitySet)
{
// Display extended properties for the entity set.
DisplayExtendedProperties(baseSet);
}
}
}
// Get a collection of the entity types.
ReadOnlyCollection<EntityType> entities =
workspace.GetItems<EntityType>(model);
// Iterate through the collection to get each entity type.
foreach (EntityType entity in entities)
{
// Display the extended properties for the entity type.
DisplayExtendedProperties(entity);
}
}
private static void DisplayExtendedProperties(MetadataItem item)
{
foreach (MetadataProperty property in item.MetadataProperties)
{
if (property.PropertyKind == PropertyKind.Extended)
Console.WriteLine(string.Format("\t{0}\t{1}\t{2}",
item.GetType().Name, property.Name, property.Value));
}
}
См. также
Основные понятия
Полная концептуальная схема AdventureWorks (модель EDM)
Полная схема хранения AdventureWorks (модель EDM)
Полная схема сопоставления AdventureWorks (модель EDM)
Использование модели объектов AdventureWorks (модель EDM)