將概念模型對應至儲存模型
Entity Framework 使用概念模型,提供以物件為中心的資料檢視,以實體類型與關聯表示。 應用程式開發人員只須針對從概念模型產生的類別來考慮程式設計,不必另外考慮儲存結構描述,以及如何存取資料存放區的物件,並將它們轉換成程式設計物件。 Entity Framework 使用概念模型、儲存體模型以及這些模型之間的對應,針對實體,將建立、讀取、更新及刪除作業轉換成資料來源中的對等作業。
![]() |
---|
本節中顯示的所有對應檔片段都是由Entity Data Model Wizard產生的。 |
概念模型
應用程式的概念模型表示概念結構定義語言 (CSDL) 中的實體和關聯性,這是Entity Data Model的實作。 CSDL 是 XML 架構語言。 以 CSDL 定義的實體類型具有名稱、用於明確識別執行個體的索引鍵,和一組屬性。 指派給屬性的資料型別會指定為簡單型別 (純量屬性) 或複雜類型 (由一或多個純量或複雜屬性構成的型別)。 XML 屬性也可用來指定可為 Null 的屬性或指派預設值。 關聯會定義實體之間的關聯性。 Entity Framework 語言項目和專有名詞的詳細說明請參閱Entity Framework 詞彙。
下列 XML 片段表示 School 概念模型的一部分 (根據 School 範例資料庫)。 範例顯示 Course 和 Department 實體類型是透過 FK_Course_Department 關聯而有相關,並已移除其他實體和關聯。
<Schema Namespace="SchoolModel" Alias="Self"
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns="https://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="SchoolEntities">
<EntitySet Name="Courses" EntityType="SchoolModel.Course" />
<EntitySet Name="Departments" EntityType="SchoolModel.Department" />
<AssociationSet Name="FK_Course_Department"
Association="SchoolModel.FK_Course_Department">
<End Role="Department" EntitySet="Departments" />
<End Role="Course" EntitySet="Courses" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Course">
<Key>
<PropertyRef Name="CourseID" />
</Key>
<Property Name="CourseID" Type="Int32" Nullable="false" />
<Property Name="Title" Type="String" Nullable="false"
MaxLength="100" Unicode="true" FixedLength="false" />
<Property Name="Credits" Type="Int32" Nullable="false" />
<Property Name="DepartmentID" Type="Int32" Nullable="false" />
<NavigationProperty Name="Department"
Relationship="SchoolModel.FK_Course_Department"
FromRole="Course" ToRole="Department" />
</EntityType>
<EntityType Name="Department">
<Key>
<PropertyRef Name="DepartmentID" />
</Key>
<Property Name="DepartmentID" Type="Int32" Nullable="false" />
<Property Name="Name" Type="String" Nullable="false"
MaxLength="50" Unicode="true" FixedLength="false" />
<Property Name="Budget" Type="Decimal" Nullable="false"
Precision="19" Scale="4" />
<Property Name="StartDate" Type="DateTime" Nullable="false" />
<Property Name="Administrator" Type="Int32" />
<NavigationProperty Name="Courses"
Relationship="SchoolModel.FK_Course_Department"
FromRole="Department" ToRole="Course" />
</EntityType>
<Association Name="FK_Course_Department">
<End Role="Department" Type="SchoolModel.Department"
Multiplicity="1" />
<End Role="Course" Type="SchoolModel.Course" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Department">
<PropertyRef Name="DepartmentID" />
</Principal>
<Dependent Role="Course">
<PropertyRef Name="DepartmentID" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
儲存模型
儲存體模型使用存放結構定義語言 (SSDL) 描述。 SSDL 中所宣告之屬性的資料型別就是儲存模型的資料型別。 這個儲存模型片段顯示 School 資料庫中由 FK_Course_Department 外部索引鍵關聯,並移除其他實體後的 Course 和 Department 資料表之儲存中繼資料範例。
<Schema Namespace="SchoolModel.Store" Alias="Self"
Provider="System.Data.SqlClient" ProviderManifestToken="2005"
xmlns:store="https://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
xmlns="https://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="SchoolModelStoreContainer">
<EntitySet Name="Course" EntityType="SchoolModel.Store.Course"
store:Type="Tables" Schema="dbo" />
<EntitySet Name="Department"
EntityType="SchoolModel.Store.Department"
store:Type="Tables" Schema="dbo" />
<AssociationSet Name="FK_Course_Department"
Association="SchoolModel.Store.FK_Course_Department">
<End Role="Department" EntitySet="Department" />
<End Role="Course" EntitySet="Course" />
</AssociationSet>
</EntityContainer>
<EntityType Name="Course">
<Key>
<PropertyRef Name="CourseID" />
</Key>
<Property Name="CourseID" Type="int" Nullable="false" />
<Property Name="Title" Type="nvarchar" Nullable="false"
MaxLength="100" />
<Property Name="Credits" Type="int" Nullable="false" />
<Property Name="DepartmentID" Type="int" Nullable="false" />
</EntityType>
<EntityType Name="Department">
<Key>
<PropertyRef Name="DepartmentID" />
</Key>
<Property Name="DepartmentID" Type="int" Nullable="false" />
<Property Name="Name" Type="nvarchar" Nullable="false"
MaxLength="50" />
<Property Name="Budget" Type="money" Nullable="false" />
<Property Name="StartDate" Type="datetime" Nullable="false" />
<Property Name="Administrator" Type="int" />
</EntityType>
<Association Name="FK_Course_Department">
<End Role="Department" Type="SchoolModel.Store.Department"
Multiplicity="1" />
<End Role="Course" Type="SchoolModel.Store.Course"
Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="Department">
<PropertyRef Name="DepartmentID" />
</Principal>
<Dependent Role="Course">
<PropertyRef Name="DepartmentID" />
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
對應規格
對應規格使用對應規格語言 (MSL),將概念模型對應至儲存體模型。 這個 MSL 片段示範 School 模型中 Course 和 Department 實體之概念模型與儲存模型間的一對一對應。
<Mapping Space="C-S"
xmlns="https://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping
StorageEntityContainer="SchoolModelStoreContainer"
CdmEntityContainer="SchoolEntities">
<EntitySetMapping Name="Courses">
<EntityTypeMapping TypeName="SchoolModel.Course">
<MappingFragment StoreEntitySet="Course">
<ScalarProperty Name="CourseID" ColumnName="CourseID" />
<ScalarProperty Name="Title" ColumnName="Title" />
<ScalarProperty Name="Credits" ColumnName="Credits" />
<ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Departments">
<EntityTypeMapping TypeName="SchoolModel.Department">
<MappingFragment StoreEntitySet="Department">
<ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
<ScalarProperty Name="Name" ColumnName="Name" />
<ScalarProperty Name="Budget" ColumnName="Budget" />
<ScalarProperty Name="StartDate" ColumnName="StartDate" />
<ScalarProperty Name="Administrator"
ColumnName="Administrator" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
討論
這裡所討論的 School 模型在概念實體與資料庫資料表之間使用簡單的一對一對應,不過 Entity Framework 可支援較複雜的對應,例如每個階層的資料表對應或一類一表對應。 如需詳細資訊,請參閱Entity Data Model Tools Scenarios和定義進階資料模型 (Entity Framework 工作)。
另請參閱
概念
其他資源
使用者入門 (Entity Framework)
定義進階資料模型 (Entity Framework 工作)
CSDL、SSDL 和 MSL 規格