従業員のスキルに関する情報の管理は、エンティティ データ モデル (EDM) 上に構築されるアプリケーションを有効に使用できるシナリオです。このアプリケーションを使用すると、ユーザーはシステム内の任意の従業員のスキルを簡単に確認したり、同一のスキルを持つ従業員を簡単に見つけたりすることができます。
従業員のスキルについての情報は、EDM エンティティおよびアソシエーションを使用することによって指定します。Skills エンティティでは、名前と簡単な説明で従業員のスキルを特定します。スキルの補足情報は、情報の場所を示す URL を含むエンティティで提供されています。アソシエーションによって、補足情報とそれに記述されているスキルが関連付けられます。システム内の従業員と同じ職場にいた人々からの照会情報は、照会される従業員を表すエンティティとのアソシエーションによって使用可能になるエンティティとして実装されます。
アプリケーションの実装は、XML デザイン スキーマで始まります。プログラミング可能なクラスは、このスキーマから構築されます。デザイン スキーマで宣言されたエンティティとアソシエーションをサポートするデータベースが作成されます。デザイン スキーマで定義されている型は、ストレージ メタデータ スキーマとしてデータベースにマップされます。
EDM アプリケーションのデザインには既存のデータを組み込むことができますが、デザイン対象のオブジェクト モデルをサポートするために特別にデータベースを構築する場合は、このプロセスが最も簡単な実装方法です。
次の画面表示は、アプリケーションと従業員のスキルに関するクエリの結果を示しています。アプリケーションが起動すると、システム内の全従業員の名前が Employees グリッド ビューに表示されます。任意の employee 行をクリックすると、Skills グリッド ビューに従業員のスキルが表示されます。この画面表示内で、ADO.NET というスキルを表す行をクリックすると、Skills/References テキスト ボックスに示されているような結果になります。Skills としては、Skills エンティティに含まれている簡単な説明が表示されます。Skills エンティティに関連付けられている SkillInfo エンティティの URL は、その他の情報へのリンクを提供します。最後に、従業員に関連付けられている References の名前、地位、電子メール アドレスが表示されます。
デザイン
従業員のスキルを追跡するためのすべての要件を満たすアプリケーションのデザインには、このサンプルで実行される分析よりも広範囲な分析が求められる場合があります。分析の範囲にかかわらず、明らかになった詳細から、アプリケーション ドメインのエンティティ、エンティティのプロパティ、およびアソシエーションが構成されます。エンティティ、プロパティ、およびアソシエーションは、概念スキーマ定義言語 (CSDL) で正式に指定されます。
このアプリケーションのドメインでは、4 つの抽象エンティティとそのエンティティ間の 3 つのリレーションシップが重要です。これらのエンティティとアソシエーションは、従業員とそのスキルを指定および記述するためのデータを定義します。次の 7 つの EDM 型が、このアプリケーションで使用されるデータを実装するためのスキーマで宣言および定義されます。
Employees
References
Skills
SkillInfo
Skill_EmployeeAssociation
Reference_EmployeeAssociation
SkillInfo_SkillAssociation
Employees
このスキーマ例の Employees には、型指定された 5 つのプロパティと 2 つのナビゲーション プロパティがあります。
EmployeeId: エンティティのインスタンスを一意に識別する、Guid 型のデータが割り当てられたキー プロパティ。
LastName: Employee の姓の値を保持する文字列プロパティ。
FirstName: Employee の名の値を保持する文字列プロパティ。
Alias: 企業のネットワーク資格情報で別名を保持する文字列プロパティ。
Email: Employee の電子メール アドレスを保持する文字列プロパティ。
Skills: Employees エンティティと Skills エンティティとの間のアソシエーションをナビゲートするために使用するナビゲーション プロパティ。
References: Employees エンティティと References エンティティとの間のアソシエーションをナビゲートするために使用するナビゲーション プロパティ。
ナビゲーション プロパティの詳細については、「ナビゲーション プロパティ (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 Information、および References を表すエンティティがこれらのエンティティ間の 3 つのアソシエーションで実装されます。次の CSDL スキーマは、HRSkills アプリケーションで使用されるすべてのエンティティとアソシエーションを宣言および定義します。この完全なスキーマは、アプリケーション コードによって使用されるオブジェクト モデルを構築するために使用します。スキーマからオブジェクト モデルを構築する方法については、「EdmGen.exe を使用して Entity Data Model を生成する方法 (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 Data Model を生成する方法 (Entity Framework)
概念
エンティティの実装 (EDM)
アソシエーションの実装 (EDM)