Поделиться через


Расширенное свойство (язык 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)