實體集 (EDM)
在 實體資料模型 (EDM) 中,EntitySet 是單一型別之實體 (Entity) 的邏輯容器 (Container)。同樣地,AssociationSet 是相同型別之關聯的容器。定義在結構描述中的實體集和關聯集會對應到資料庫中針對應用程式儲存資料的資料表。實體集和關聯集是應用程式程式碼使用之程式設計物件模型內的類別基礎。
實體集和關聯集會定義實體和關聯的範圍,而實體容器會定義保存實體和關聯的儲存體容器。目前沒有任何 SimpleType 的集合。這些型別會具現化成為指派給實體屬性的值。
EntityType 的 EntitySet 包含 EntityType 或任何其子型別的執行個體 (Instance)。藉由使用相同的 EntityType,您可以定義一個以上的 EntitySet。EntityType 的執行個體只能屬於單一 EntitySet 的成員。
EntitySet 中的實體執行個體必須滿足三個條件:
實體執行個體的型別是 EntitySet 的 EntityType,或者是 EntityType 的任何子型別。
實體執行個體不屬於任何其他 EntitySet 的成員。
下列概念結構定義語言 (CSDL) 語法是名為 CustomerSet
之 EntitySet 的宣告。EntitySet 包含實體 CustomerType
的執行個體:
<EntitySet Name="CustomerSet" EntityType="CustomerType"/>
下列結構描述區段中的兩個 EntityType 宣告,會定義實體類型 Product
和 Supplier
。以 Product
和 Supplier
實體為基礎的實體集會以複數形式適當地命名:Products
和 Suppliers
。這些實體集會加入至 EntityContainer 的定義。
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.LOBSchema" Alias="Self">
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductID" />
</Key>
<Property Name="ProductID" Type="Int32" Nullable="false" />
<Property Name="ProductName" Type="String" Nullable="false" />
<Property Name="UnitPrice" Type="Decimal" Nullable="true" />
<Property Name="UnitsInStock" Type="Int16" Nullable="true" />
</EntityType>
<EntityType Name="Supplier">
<Key>
<PropertyRef Name="SupplierID" />
</Key>
<Property Name="SupplierID" Type="Int32" Nullable="false" />
<Property Name="CompanyName" Type="String" Nullable="false" />
<Property Name="ContactName" Type="String" Nullable="true" />
<Property Name="HomePage" Type="String" Nullable="true" />
</EntityType>
<EntityContainer Name="LOB-Data">
<EntitySet Name="Products" EntityType="Product" />
<EntitySet Name="Suppliers" EntityType="Supplier" />
</EntityContainer>
</Schema>
如需實體容器的詳細資訊,請參閱實體容器 (EDM)。
每個類型的多重實體
Entity Data Model (EDM) 允許單一實體容器或多個實體容器內部的多重實體集針對相同的實體類型定義。當資料庫具有多個資料表有相同結構的分割或其他這類案例時,定義每個類型的多重實體 (MEST) 可讓使用者簡化程式碼。
資料庫會針對各種原因進行分割,例如效能、可用性和管理能力。管理大量客戶之帳戶的財務機構可能會依據客戶資料的地區分佈分割其資料庫系統,以便提升效能。如果限制為資料的地區子集,則搜尋和更新資料的速度就會更快。若要實作 MEST,您必須在相同的資料庫內部進行分割案例。如果您在不同的資料庫之間進行分割,就需要使用不同的連接字串 (Connection String) 和不同的內容,而非 MEST 案例。
另一個分割可能會有用的案例是,某個 IT 部門想要在每天晚上備份經常存取的資料,同時封存已經超過一年沒有存取的資料。DBA 可能會使用相同的資料表結構描述,將超過一年沒有使用帳戶資料的客戶封存在相同資料庫的封存資料表中。
請務必考量屬於多個實體集成員之實體類型之間的關聯結構。MEST 是最容易根據已經測試之結構進行實作的案例。下面是已經成功使用的案例。
在一對多關聯中,針對關聯之「一」端實作成 MEST 的實體應該與「多」端的兩個不同實體集具有關聯性 (Relationship)。例如,您可以使用
Customer
實體類型在PreferedCustomers
和CreditRiskCustomers
這兩個實體集中實作下列案例。PreferedCustomers <1-----*> Orders
CreditRiskCustomers <1-----*> CreditReports
在一對多關聯中,「一」端的實體集可能會與針對「多」端實作成 MEST 的實體具有關聯。例如,
Product
實體可以與ManufacturingUnit
實體一起加入兩個實體集和關聯中。ManufacturingUnit <1-----*> Products
ManufacturingUnit <1----*> DefectiveProducts
當您在設計邏輯模型和 (或) 將邏輯模型對應至概念模型時,「一對一」或「多對多」案例中的 MEST 實作 (Implementation) 會難以實作。一對一和多對多 MEST 的問題與讓「一」端的 MEST 與「多」端之相同實體集產生關聯性的問題相同。使用一對一案例時,您可以建立類似一對多情況的邏輯模型。
當您在設計邏輯模型時,下列訂單案例將會發生問題。
PreferedCustomers <1-----*> Orders
CreditRiskCustomers <1-----*> Orders
如需詳細資訊,請參閱 HOW TO:使用每個類型的多重實體來定義模型 (Entity Framework)。
另請參閱
概念
關聯 (EDM)
關聯集 (EDM)
實體容器 (EDM)
Entity Data Model 類型
簡單型別 (EDM)