Entity Framework 透過 EDMX 檔案定義所需的資料模型,EDMX是一種副檔名為 .edmx 的檔案,包含三個部份 - CSDL、SSDL 與 C-S mapping ,在 XML 編輯視窗中屬於 EF Runtime content ,配置於 區塊中,在專案編之後,會形成三個獨立的檔案如下:
在實際的設計架構中,這三者相互運作,提供低層資料來源與客戶端程式或是服務,透過 Entity Framework 進行資料存取所需的聯繫,如下圖:
另外, .edmx 檔案最下方有一個 EF Designer content 的區塊,配置於 <designer> ,這是視覺化工具 EF 設計師呈現模型圖像內容所需的資料,要避免手動修改其內容,否則將會導致工具開啟時的錯誤。
資料物件模型的操作與傳統的資料庫類似,必須定義底層資料來源的連線,接下來才透過指定的連線存取資料物件,也因此在建立實體資料模型的過程中,它會要求我們指定連線的名稱,在 建立實體資料模型的過程中,我們看到連線的設定如下:
對話方塊最下方提示 KTMSEntities 這個連線設定將儲存於 App.config 組態檔中,將其開啟畫面如下:
反白的部份為連線設定,連線字串內容如下:
其中包含中繼資料、資料提供者、資料來源與連線的資料庫等相關資訊,比較需要注意的是地方,在於 metadata 指出了所需的資料模型檔案,其中的 * 表示相關的檔案嵌入專案的組件檔中,也就是Entity Framework 入門(4)- EDM 內容與編譯實體檔案這一篇提及的三個編譯實體檔案。
請特別注意連線字串為 KTMSEntities ,現在回到 初探 Entity Framework 這一篇,切換至專案清單畫面:
將 ModelKTMS.edmx 節點展開,底下有數個不同的檔案節點,進一步將 ModelKTMS.Context.tt ,將底下的 ModelKTMS.Context.cs 檔案開啟,其中是 KTMSEntities 類別定義:
KTMSEntities 繼承了 DbContext 類別,而 Categories 屬性回傳的則是 Categories 型態的 DbSet 類別,透過這些類別,我們因此可以撰寫相關的程式碼使用實體資料模型,讀者在這個專案的簡單示範中,亦見到了我們最後利用LINQ 語法存取其中的資料。DbContext 與 DbSet 是 Entity Framework 應用開發最重要的類別。
EDM 概念模型以邏輯實體容器管理實體集,就如同資料庫管理資料表,而DbContext底下的DbSet 則是對應至實體集。上述的 KTMSEntities 類別,其繼承 DbContext 的基礎建構式如下:
其中指定了 name=KTMSEntities 參數為連線來源,因此當我們於 Program.cs 程式中建立 KTMSEntities 實體物件,即可透過組態檔的連線設定,分別調用 ModelKTMS.csdl 、 ModelKTMS.ssdl 以及 ModelKTMS.msl這三個檔案,並連接底層資料來源。
Entity Framework 有一套自己專屬的資料型態,開發人員必須瞭解這些型態與底層資料庫的型態對應,由於 Entity Framework 可以處理不同的資料來源,例如 Oracle 、 SQL Server 等等,因此在面對不同的底層資料庫來源時,瞭解特定資料庫對映的資料型態相當重要。在SqlClient for Entity FrameworkTypes 這個網頁,可以找到 SQL Server 專屬的型態對應列表如下:
接下來,我們會進行更多的 Entity Framework 討論,檢視各種資料模型內容,特別是後續的 Code First 模式開發,都會用到這裏的知識,這篇預先建立必要的概念。
延伸檔名
|
.edmx 區塊
|
XXX.csdl
|
概念模型(CSDL)
|
XXX.ssdl
|
儲存模型(SSDL)
|
XXX.msl
|
對應(C-S mapping)
|
在實際的設計架構中,這三者相互運作,提供低層資料來源與客戶端程式或是服務,透過 Entity Framework 進行資料存取所需的聯繫,如下圖:
另外, .edmx 檔案最下方有一個 EF Designer content 的區塊,配置於 <designer> ,這是視覺化工具 EF 設計師呈現模型圖像內容所需的資料,要避免手動修改其內容,否則將會導致工具開啟時的錯誤。
資料物件模型的操作與傳統的資料庫類似,必須定義底層資料來源的連線,接下來才透過指定的連線存取資料物件,也因此在建立實體資料模型的過程中,它會要求我們指定連線的名稱,在 建立實體資料模型的過程中,我們看到連線的設定如下:

對話方塊最下方提示 KTMSEntities 這個連線設定將儲存於 App.config 組態檔中,將其開啟畫面如下:

反白的部份為連線設定,連線字串內容如下:
<add
name="KTMSEntities"
connectionString="
metadata=
res://*/ModelKTMS.csdl|
res://*/ModelKTMS.ssdl|
res://*/ModelKTMS.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=TIM-PC;
initial catalog=KTMS;
integrated security=True;
MultipleActiveResultSets=True;
App=EntityFramework""
providerName="System.Data.EntityClient" />
其中包含中繼資料、資料提供者、資料來源與連線的資料庫等相關資訊,比較需要注意的是地方,在於 metadata 指出了所需的資料模型檔案,其中的 * 表示相關的檔案嵌入專案的組件檔中,也就是Entity Framework 入門(4)- EDM 內容與編譯實體檔案這一篇提及的三個編譯實體檔案。
請特別注意連線字串為 KTMSEntities ,現在回到 初探 Entity Framework 這一篇,切換至專案清單畫面:

將 ModelKTMS.edmx 節點展開,底下有數個不同的檔案節點,進一步將 ModelKTMS.Context.tt ,將底下的 ModelKTMS.Context.cs 檔案開啟,其中是 KTMSEntities 類別定義:
namespace KTMS
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class KTMSEntities : DbContext
{
public KTMSEntities()
: base("name=KTMSEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<Categories> Categories { get; set; }
}
}
KTMSEntities 繼承了 DbContext 類別,而 Categories 屬性回傳的則是 Categories 型態的 DbSet 類別,透過這些類別,我們因此可以撰寫相關的程式碼使用實體資料模型,讀者在這個專案的簡單示範中,亦見到了我們最後利用LINQ 語法存取其中的資料。DbContext 與 DbSet 是 Entity Framework 應用開發最重要的類別。
EDM 概念模型以邏輯實體容器管理實體集,就如同資料庫管理資料表,而DbContext底下的DbSet 則是對應至實體集。上述的 KTMSEntities 類別,其繼承 DbContext 的基礎建構式如下:
public KTMSEntities()
: base("name=KTMSEntities")
{
}
其中指定了 name=KTMSEntities 參數為連線來源,因此當我們於 Program.cs 程式中建立 KTMSEntities 實體物件,即可透過組態檔的連線設定,分別調用 ModelKTMS.csdl 、 ModelKTMS.ssdl 以及 ModelKTMS.msl這三個檔案,並連接底層資料來源。
Entity Framework 有一套自己專屬的資料型態,開發人員必須瞭解這些型態與底層資料庫的型態對應,由於 Entity Framework 可以處理不同的資料來源,例如 Oracle 、 SQL Server 等等,因此在面對不同的底層資料庫來源時,瞭解特定資料庫對映的資料型態相當重要。在SqlClient for Entity FrameworkTypes 這個網頁,可以找到 SQL Server 專屬的型態對應列表如下:
接下來,我們會進行更多的 Entity Framework 討論,檢視各種資料模型內容,特別是後續的 Code First 模式開發,都會用到這裏的知識,這篇預先建立必要的概念。
沒有留言:
張貼留言