人力資源技能 WinApp (EDM 範例應用程式)
管理有關員工技能的資訊對於在 實體資料模型 (EDM) 上建置的應用程式而言,是一種有趣的案例。這個應用程式可讓使用者輕鬆判斷系統中所包含之任何員工的技能,或是尋找具有可識別技能的員工。
有關員工技能的資訊是使用 EDM 實體和關聯所指定。技能實體會依據名稱和簡短描述來識別員工技能。包含尋找資訊之 URL 的實體會提供有關技能的補充資訊。關聯會將補充資訊連接到它所描述的技能。曾經與系統中員工共事過的人所提供的介紹信會實作為實體,可透過代表他們介紹之員工的實體關聯來使用。
應用程式的實作是從 XML 設計結構描述開始。可程式化類別是從這個結構描述建置而來。建立資料庫是為了支援設計結構描述中所宣告的實體和關聯。設計結構描述中定義的型別會透過儲存中繼資料結構描述對應到資料庫。
EDM 應用程式的設計可併入現有的資料,但是當特別建置資料庫來支援所設計的物件模型時,此程序是最容易實作的。
下列螢幕畫面會顯示查詢員工技能的套用和結果。當此應用程式啟動時,Employees 方格檢視會顯示系統中所有員工的名稱。按一下任何 employee 資料列就會將員工的技能顯示在 Skills 方格檢視中。在螢幕畫面中,按一下代表技能的資料列 (如 ADO.NET 所述) 會產生 Skills/References 文字方塊內所顯示的結果。Skills 會以簡短的描述來敘述,該描述是由 Skills 實體所容納。與 Skills 實體有關聯之 SkillInfo 實體的 URL 會提供其他資訊的連結。最後會顯示與員工有關聯之 References 的名稱、職位和電子郵件地址。
設計
符合追蹤員工技能之所有需求的應用程式設計可能需要做比這個範例更廣泛的分析。不論分析的範圍為何,探索的詳細資料都是由實體、實體的屬性及應用程式定義域中的關聯所組成。實體、屬性和關聯會在概念結構定義語言 (CSDL) 中正式指定。
其中有四個抽象實體和三個關聯性在這個應用程式的定義域中非常重要。這些實體和關聯會定義用來識別及描述員工和員工技能的資料。下列七個 EDM 型別會宣告及定義在結構描述中,而此結構描述是用來實作這個應用程式所使用的資料。
Employees
References
Skills
SkillInfo
Skill_EmployeeAssociation
Reference_EmployeeAssociation
SkillInfo_SkillAssociation
員工
此結構描述範例中的員工有五個具型別的屬性及兩個導覽屬性。
EmployeeId:有指派唯一識別實體執行個體之 Guid 型別資料的 Key 屬性。
LastName:保存 Employee 姓氏之值的 String 屬性。
FirstName:保存 Employee 名字之值的 String 屬性。
Alias:保存公司網路認證中之別名的 String 屬性。
Email:保存 Employee 電子郵件地址的 String 屬性。
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 的實體。下列 CSDL 結構描述會宣告及定義 HRSkills 應用程式使用的所有實體和關聯。這個完整的結構描述是用來建置應用程式程式碼所使用的物件模型。如需從結構描述建置物件模型的詳細資訊,請參閱 HOW TO:HOW TO:使用 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>
這個結構描述中所定義的實體和關聯需要資料庫實作,才能保存這個模型中的資料。如需儲存中繼資料規格,請參閱人力資源儲存中繼資料 (EDM 範例應用程式)。
本章節中概念結構描述的實體和關聯會使用儲存結構描述,以便將可程式化型別連接到保存應用程式資料的資料庫。如需本章節中概念結構描述與儲存中繼資料之間對應的詳細資訊,請參閱人力資源技能對應規格 (EDM 範例應用程式)。
另請參閱
工作
HOW TO:使用 EdmGen.exe 產生 Entity Data Model (Entity Framework)