다음을 통해 공유


Human Resources Skills WinApp(EDM 샘플 응용 프로그램)

직원의 기술 정보 관리는 EDM(엔터티 데이터 모델)을 기반으로 하는 응용 프로그램에 있어서 흥미로운 시나리오 중 하나입니다. 사용자는 이 응용 프로그램을 통해 시스템에 포함된 직원의 기술을 확인하거나 식별 가능한 기술을 보유한 직원을 손쉽게 찾을 수 있습니다.

직원 기술에 대한 정보는 EDM 엔터티 및 연결을 사용하여 지정합니다. 기술 엔터티는 이름과 간략한 설명으로 직원 기술을 식별합니다. 기술에 대한 부가 정보는 정보의 위치를 나타내는 URL이 포함된 엔터티에서 제공됩니다. 연결은 부가 정보와 이 정보가 나타내는 기술을 연결합니다. 시스템에서 직원과 함께 일한 사람에 의한 참조는 참조 대상 직원을 나타내는 엔터티와의 연결을 통해 제공되는 엔터티로 구현됩니다.

응용 프로그램의 구현은 XML 디자인 스키마로 시작합니다. 프로그래밍 가능 클래스는 이 스키마를 기반으로 만들어집니다. 디자인 스키마에 선언된 엔터티와 연결을 지원하도록 데이터베이스가 만들어집니다. 디자인 스키마에 정의된 형식은 저장소 메타데이터 스키마를 통해 데이터베이스에 매핑됩니다.

EDM 응용 프로그램의 디자인은 기존 데이터를 통합할 수 있으나, 디자인 대상 개체 모델을 지원하기 위한 데이터베이스가 특별히 만들어질 때의 프로세스가 가장 구현하기 쉽습니다.

다음 화면 표시에서는 이 응용 프로그램과 직원의 기술에 대한 쿼리 결과를 보여 줍니다. 응용 프로그램이 시작되면 Employees 표 뷰에 시스템 내 모든 직원의 이름이 표시됩니다. employee 행 중 하나를 클릭하면 Skills 표 뷰에 직원의 기술이 표시됩니다. 화면 표시에서 ADO.NET으로 설명된 기술을 나타내는 행을 클릭하면 Skills/References 텍스트 상자에 표시됩니다. Skills 엔터티에 Skills에 대한 간략한 설명이 나타납니다. Skills 엔터티와 연결된 SkillInfo 엔터티의 URL은 다른 정보에 대한 링크를 제공합니다. 마지막으로, 직원과 연결된 References의 이름, 직위 및 전자 메일 주소가 표시됩니다.

쿼리의 HR Skills Windows 응용 프로그램 결과

디자인

직원 기술을 추적하기 위한 모든 요구 사항에 부합하는 응용 프로그램을 디자인하려면 이 샘플보다 더 포괄적인 분석이 필요할 수 있습니다. 분석의 범위에 관계없이, 분석 결과 정보는 응용 프로그램 도메인의 엔터티, 엔터티 속성 및 연결을 구성합니다. 엔터티, 속성 및 연결은 CSDL(개념 스키마 정의 언어)로 정식으로 지정됩니다.

이 응용 프로그램의 도메인에서는 추상 엔터티 4개와 엔터티 간의 관계 3개가 중요합니다. 이러한 엔터티와 연결이 직원과 직원 기술을 식별하고 설명하는 데 사용되는 데이터를 정의합니다. 이 응용 프로그램에서 데이터 구현에 사용되는 스키마에서 다음 7가지의 EDM 형식을 선언하고 정의합니다.

  • Employees

  • References

  • Skills

  • SkillInfo

  • Skill_EmployeeAssociation

  • Reference_EmployeeAssociation

  • SkillInfo_SkillAssociation

Employees

이 스키마 예제에서 직원은 5개 형식의 속성과 2개의 탐색 속성을 갖습니다.

EmployeeId: Guid 형식의 데이터가 할당되어 엔터티의 인스턴스를 고유하게 식별하는 키 속성입니다.

LastName: Employee의 이름 중 성의 값을 저장하는 문자열 속성입니다.

FirstName: Employee의 이름 값을 저장하는 문자열 속성입니다.

Alias: 회사 네트워크 자격 증명에서의 별칭을 저장하는 문자열 속성입니다.

Email: Employee의 전자 메일 주소를 저장하는 문자열 속성입니다.

Skills: EmployeesSkills 엔터티 간의 연결을 탐색할 때 사용하는 탐색 속성입니다.

References: EmployeesReferences 엔터티 간의 연결을 탐색할 때 사용하는 탐색 속성입니다.

탐색 속성에 대한 자세한 내용은 탐색 속성(EDM)을 참조하십시오.

HRSkills 응용 프로그램에서는 다음 CSDL 구문을 사용하여 Employees 엔터티와 그 속성을 정의합니다.

        <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 InformationReferences를 나타내는 엔터티가 이들 엔터티 간의 연결 3개와 함께 구현됩니다. 다음 CSDL 스키마에서는 HRSkills 응용 프로그램에서 사용하는 모든 엔터티 및 연결을 선언하고 정의합니다. 이 전체 스키마는 응용 프로그램 코드에서 사용되는 개체 모델을 작성하는 데 사용됩니다. 스키마에서 개체 모델을 작성하는 방법에 대한 자세한 내용은 방법: 방법: EdmGen.exe를 사용하여 엔터티 데이터 모델 생성(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를 사용하여 엔터티 데이터 모델 생성(Entity Framework)

개념

엔터티 구현(EDM)
연결 구현(EDM)

기타 리소스

EDM 사양
스키마 및 매핑 사양(Entity Framework)