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


Приложение Human Resources Skills для Windows (образец приложения модели EDM)

Управление сведениями о навыках сотрудников — это интересный сценарий для приложения, созданного на основе модели Entity Data Model (модель EDM). Это приложение предоставляет пользователям возможность легко определить навыки любого сотрудника, включенного в систему, или найти сотрудника с определенными навыками.

Сведения о навыках сотрудников указываются с помощью сущностей и ассоциаций модели EDM. Сущности навыков определяют навыки сотрудников с помощью имени и краткого описания. Дополнительные сведения о навыках предоставляются в сущности, содержащей URL-адрес расположения сведений. Ассоциация соединяет дополнительные сведения с навыками, которые они описывают. Рекомендации от людей, работавших с сотрудниками в системе, реализуются как сущности, доступные через ассоциации с сущностями, представляющими сотрудников, рекомендуемых ими.

Реализация приложения начинается с XML-схемы макета. На основе данной схемы создаются программируемые классы. Для поддержки сущностей и ассоциаций, объявленных в схеме макета, создается база данных. Типы, определенные в схеме макета, сопоставляются с базой данных с помощью схемы метаданных хранилища.

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

На следующем экране отображаются приложение и результаты запроса по навыкам сотрудника. После запуска приложения в сетке просмотра Employees отображаются имена всех сотрудников в системе. После щелчка любой строки employee в сетке просмотра Skills отображаются навыки сотрудника. Как показано на рисунке, щелчок строки, которая представляет навык, описанный с помощью ADO.NET, вызвал появление результатов в текстовом поле Skills/References. Для сущности Skills приведено краткое описание, содержащееся в сущности Skills. URL-адреса в сущностях SkillInfo, связанных с сущностями Skills, предоставляют ссылки на другие сведения. И, наконец, отображаются имена, должности и адреса электронной почты дающих рекомендации людей References, связанных с сотрудником.

Результаты запроса приложения Windows HR Skills

Макет

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

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

  • Employees

  • References

  • Skills

  • SkillInfo

  • Skill_EmployeeAssociation

  • Reference_EmployeeAssociation

  • SkillInfo_SkillAssociation

Employees

Тип Employees в этом примере схемы имеет пять типизированных свойств и два свойства навигации.

EmployeeId — свойство Key, имеющее тип данных Guid, уникально определяющее экземпляры сущности.

LastName — свойство типа String, содержащее фамилию экземпляра Employee.

FirstName — свойство типа String, содержащее имя экземпляра Employee.

Alias — свойство типа String, содержащее псевдоним сетевых учетных данных компании.

Email — свойство типа String, содержащее электронный адрес экземпляра Employee.

Skills — свойство навигации, используемое для перехода по ассоциации между сущностями Employees и Skills .

References — свойство навигации, используемое для перехода по ассоциации между сущностями Employees и References.

Дополнительные сведения о свойствах навигации см. в разделе Свойства навигации (модель EDM).

Приложение HRSkills определяет сущности Employees и их свойства с помощью следующего синтаксиса языка CSDL.

        <EntityType Name="Employees">
          <Key>
            <PropertyRef Name="EmployeeId" />
          </Key>
          <Property Name="EmployeeId" Type="Guid" Nullable="false" />
          <Property Name="LastName" Type="String" Nullable="false"
              MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="FirstName" Type="String" MaxLength="50"
              Unicode="true" FixedLength="false" />
          <Property Name="Alias" Type="String" Nullable="false"
              MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="Email" Type="String" MaxLength="50"
              Unicode="true" FixedLength="false" />
          <NavigationProperty Name="References"
 Relationship="HRSkillsModel.Reference_Employee" FromRole="Employees"
             ToRole="References" />
          <NavigationProperty Name="Skills"
  Relationship="HRSkillsModel.Skill_Employee" FromRole="Employees"
            ToRole="Skills" />
        </EntityType>

В дополнение к уже описанным сущностям Employees реализуются сущности Skills, Skill Information и References, а также три ассоциации между этими сущностями. В следующей CSDL-схеме объявляются и определяются все сущности и ассоциации, используемые приложением HRSkills. Эта полная схема применяется для построения модели объектов, которая используется кодом приложения. Сведения о построении модели объектов из схем см. в разделе «Как Как использовать программу EdmGen.exe для формирования модели EDM (Entity Framework).

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="HRSkillsModel" Alias="Self"
             xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
        <EntityContainer Name="HRSkills">
          <EntitySet Name="Employees"
                  EntityType="HRSkillsModel.Employees" />
          <EntitySet Name="References"
                  EntityType="HRSkillsModel.References" />
          <EntitySet Name="SkillInfo"
                  EntityType="HRSkillsModel.SkillInfo" />
          <EntitySet Name="Skills" EntityType="HRSkillsModel.Skills" />
          <AssociationSet Name="Reference_Employee"
                 Association="HRSkillsModel.Reference_Employee">
            <End Role="Employees" EntitySet="Employees" />
            <End Role="References" EntitySet="References" />
          </AssociationSet>
          <AssociationSet Name="Skill_Employee"
                 Association="HRSkillsModel.Skill_Employee">
            <End Role="Employees" EntitySet="Employees" />
            <End Role="Skills" EntitySet="Skills" />
          </AssociationSet>
          <AssociationSet Name="SkillInfo_Skill"
                  Association="HRSkillsModel.SkillInfo_Skill">
            <End Role="Skills" EntitySet="Skills" />
            <End Role="SkillInfo" EntitySet="SkillInfo" />
          </AssociationSet>
        </EntityContainer>
        <EntityType Name="Employees">
          <Key>
            <PropertyRef Name="EmployeeId" />
          </Key>
          <Property Name="EmployeeId" Type="Guid" Nullable="false" />
          <Property Name="LastName" Type="String" Nullable="false"
              MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="FirstName" Type="String" MaxLength="50"
              Unicode="true" FixedLength="false" />
          <Property Name="Alias" Type="String" Nullable="false"
              MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="Email" Type="String" MaxLength="50"
              Unicode="true" FixedLength="false" />
          <NavigationProperty Name="References"
 Relationship="HRSkillsModel.Reference_Employee" FromRole="Employees"
             ToRole="References" />
          <NavigationProperty Name="Skills"
  Relationship="HRSkillsModel.Skill_Employee" FromRole="Employees"
            ToRole="Skills" />
        </EntityType>
        <EntityType Name="References">
          <Key>
            <PropertyRef Name="ReferenceId" />
          </Key>
          <Property Name="ReferenceId" Type="Guid" Nullable="false" />
          <Property Name="LastName" Type="String" Nullable="false"
               MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="FirstName" Type="String" MaxLength="50"
              Unicode="true" FixedLength="false" />
          <Property Name="Position" Type="String" MaxLength="50"
             Unicode="true" FixedLength="false" />
          <Property Name="Alias" Type="String" Nullable="false"
             MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="Email" Type="String" MaxLength="50"
             Unicode="true" FixedLength="false" />
          <NavigationProperty Name="Employees"
 Relationship="HRSkillsModel.Reference_Employee" FromRole="References"
            ToRole="Employees" />
        </EntityType>
        <EntityType Name="SkillInfo">
          <Key>
            <PropertyRef Name="SkillInfoId" />
          </Key>
          <Property Name="SkillInfoId" Type="Guid" Nullable="false" />
          <Property Name="URL" Type="String" Nullable="false"
              MaxLength="250" Unicode="true" FixedLength="false" />
          <NavigationProperty Name="Skills"
  Relationship="HRSkillsModel.SkillInfo_Skill" FromRole="SkillInfo"
           ToRole="Skills" />
        </EntityType>
        <EntityType Name="Skills">
          <Key>
            <PropertyRef Name="SkillId" />
          </Key>
          <Property Name="SkillId" Type="Guid" Nullable="false" />
          <Property Name="SkillName" Type="String" Nullable="false"
             MaxLength="50" Unicode="true" FixedLength="false" />
          <Property Name="BriefDescription" Type="String"
 Nullable="false" MaxLength="Max" Unicode="true" FixedLength="false" />
          <NavigationProperty Name="Employees"
        Relationship="HRSkillsModel.Skill_Employee" FromRole="Skills"
          ToRole="Employees" />
          <NavigationProperty Name="SkillInfo"
 Relationship="HRSkillsModel.SkillInfo_Skill" FromRole="Skills"
            ToRole="SkillInfo" />
        </EntityType>
        <Association Name="Reference_Employee">
          <End Role="Employees" Type="HRSkillsModel.Employees"
                  Multiplicity="1" />
          <End Role="References" Type="HRSkillsModel.References"
                  Multiplicity="*" />
        </Association>
        <Association Name="Skill_Employee">
          <End Role="Employees" Type="HRSkillsModel.Employees"
               Multiplicity="1" />
          <End Role="Skills" Type="HRSkillsModel.Skills"
               Multiplicity="*" />
        </Association>
        <Association Name="SkillInfo_Skill">
          <End Role="Skills" Type="HRSkillsModel.Skills"
               Multiplicity="1" />
          <End Role="SkillInfo" Type="HRSkillsModel.SkillInfo"
               Multiplicity="*" />
        </Association>
      </Schema>

Сущностям и ассоциациям, описанным в данной схеме, необходима реализация базы данных, чтобы хранить данные в этой модели. Спецификацию метаданных хранилища см. в разделе Метаданные хранилища HR Skills (образец приложения модели EDM).

В сущностях и ассоциациях концептуальной схемы в этом разделе используется схема хранения для подключения программируемых типов к базе данных, хранящей данные для приложения. Дополнительные сведения о сопоставлении между концептуальной схемой в этом разделе и метаданными хранилища см. в разделе Спецификация сопоставления HR Skills (образец приложения модели EDM).

См. также

Задачи

Как использовать программу EdmGen.exe для формирования модели EDM (Entity Framework)

Основные понятия

Реализация сущностей (модель EDM)
Реализация ассоциаций (модель EDM)

Другие ресурсы

Спецификации модели EDM
Спецификация схем и сопоставлений (платформа Entity Framework)