移轉考量 (Entity Framework)
ADO.NET Entity Framework 可以為現有應用程式提供幾項優勢。 其中一項最重要的優勢,就是使用概念模型將應用程式所使用的資料結構從資料來源中的結構描述分隔。 這樣能方便您以後對儲存體模型或資料來源本身進行變更,而不必對應用程式進行補償變更。 如需使用 Entity Framework 之優勢的詳細資訊,請參閱 Entity Framework 概觀和實體資料模型。
若要利用 Entity Framework 的優勢,您可以將現有應用程式移轉至 Entity Framework。 有些工作通用於所有移轉的應用程式。 這些一般工作包括將應用程式升級為使用從 Service Pack 1 (SP1) 3.5 版開始的 .NET Framework、定義模型和對應,以及設定 Entity Framework。 在您將應用程式移轉至 Entity Framework 時,有其他的適用考量。 這些考量取決於要移轉的應用程式類型以及應用程式的特定功能。 本主題所提供的資訊有助於您選擇在升級現有應用程式時要使用的最佳方式。
一般移轉考量
下列考量適用於將任何應用程式移轉至 Entity Framework 時:
任何使用以 3.5 版 SP1 開頭之 .NET Framework 的應用程式都可以移轉至 Entity Framework,只要應用程式所使用資料來源的資料提供者支援 Entity Framework 即可。
Entity Framework 可能無法支援資料來源提供者的所有功能,即使那個提供者支援 Entity Framework 也一樣。
針對大型或複雜應用程式,您不必一次將整個應用程式移轉至 Entity Framework, 但是資料來源變更時,還是要變更未使用 Entity Framework 的任何應用程式部分。
Entity Framework 所使用的資料提供者連線可以與應用程式的其他部分共用,因為 Entity Framework 使用 ADO.NET 資料提供者來存取資料來源。 例如,Entity Framework 是使用 SqlClient 提供者進行存取 SQL Server 資料庫。 如需詳細資訊,請參閱 Entity Framework 的 EntityClient 提供者 (部分機器翻譯)。
通用移轉工作
將現有應用程式移轉至 Entity Framework 的路徑取決於應用程式的類型以及現有資料存取策略。 不過,當您將現有應用程式移轉至 Entity Framework 時,一律必須執行下列工作。
注意
使用從 Visual Studio 2008 開始的實體資料模型工具時,會自動執行上述所有工作。 如需詳細資訊,請參閱如何:使用實體資料模型精靈。
升級應用程式。
使用舊版 Visual Studio 和 .NET Framework 所建立的專案必須升級成使用從 3.5 版 SP1 開始的 Visual Studio 2008 SP1 和 .NET Framework。
定義模型與對應
模型和對應檔案定義概念模型中的實體、資料來源中的結構 (例如資料表、預存程序和檢視表),以及實體與資料來源結構間的對應。 如需詳細資訊,請參閱作法:手動定義模型和對應檔。
儲存體模型中定義的類型必須與資料來源中物件的名稱相符。 如果現有應用程式將資料公開 (Expose) 為物件,您必須確保概念模型中定義的實體和屬性與這些現有資料類別和屬性的名稱相符。 如需詳細資訊,請參閱如何:自訂模型和對應檔以處理自訂物件。
注意
Entity Data Model Designer 可以用來重新命名概念模型中的實體,使其與現有物件相符。 如需詳細資訊,請參閱實體資料模型設計工具。
定義連接字串 (Connection String)。
針對概念模型執行查詢時,Entity Framework 會使用特殊格式化的連接字串。 此連接字串會封裝與模型和對應檔以及資料來源連接有關的資訊。
設定 Visual Studio 專案。
您必須將 Entity Framework 組件以及模型和對應檔的參考新增至 Visual Studio 專案。 您可以將這些對應檔加入至專案,以確保它們與應用程式一起部署在連接字串中所指示的位置。 如需詳細資訊,請參閱作法:手動設定 Entity Framework 專案。
適用於具有現有物件的應用程式之考量
從 .NET Framework 4 開始,Entity Framework 支援「單純」簡單的 CLR 物件 (POCO),又稱為非持續性物件。 在大部分的情況下,稍加變更,現有的物件就能與 Entity Framework 搭配使用。 如需詳細資訊,請參閱處理 POCO 實體。 您也可以將應用程式移轉至 Entity Framework,並使用 Entity Framework 工具所產生的資料類別。 如需詳細資訊,請參閱如何:使用實體資料模型精靈。
適用於使用 ADO.NET 提供者的應用程式之考量
ADO.NET 提供者 (如 SqlClient) 可讓您查詢資料來源,以傳回表格式資料。 資料也可以載入至 ADO.NET DataSet。 下列清單描述升級可使用現有 ADO.NET 提供者的應用程式的考量:
使用資料讀取器 (Reader) 顯示表格式資料。
您可以考慮使用 EntityClient 提供者來執行 Entity SQL 查詢,並且列舉整個傳回的 EntityDataReader 物件。 只有在應用程式使用資料讀取器顯示表格式資料,而且不需要 Entity Framework 所提供的功能以將資料具體化為物件、追蹤變更和處理更新時才這麼做。 您可以繼續使用對資料來源進行更新的現有資料存取程式碼,不過您可以使用從 StoreConnection 的 EntityConnection 屬性存取的現有連接。 如需詳細資訊,請參閱 Entity Framework 的 EntityClient 提供者 (部分機器翻譯)。
使用資料集。
Entity Framework 所提供的許多功能都與資料集所提供的相同,包括在記憶體中的持續性、變更追蹤、資料繫結,以及將物件序列化為 XML 資料。 如需詳細資訊,請參閱使用物件。
如果 Entity Framework 未提供應用程式所需的 DataSet 功能,則您還是可以使用 LINQ to DataSet 來利用 LINQ 查詢的優勢。 如需詳細資訊,請參閱 LINQ to DataSet。
適用於將資料繫結至控制項的應用程式之考量
.NET Framework 可讓您封裝 DataSet 或 ASP.NET 資料來源控制項這類資料來源中的資料,然後將使用者介面項目繫結至那些資料控制項。 下列清單說明適用於將控制項繫結至 Entity Framework 資料的考量。
將資料繫結至控制項。
當您查詢概念模型時,Entity Framework 會傳回資料作為實體類型執行個體的物件。 這些物件可以直接繫結至控制項,而且此繫結作業支援更新。 這表示在呼叫 SaveChanges 方法時,會自動將針對控制項中資料 (如 DataGridView 中的資料列) 所做的變更儲存至資料庫。
如果應用程式列舉查詢的結果,以在 DataGridView 或其他支援資料繫結程序的控制項類型中顯示資料,您則可以把應用程式修改為將控制項繫結程序至 ObjectQuery<T> 的結果。
如需詳細資訊,請參閱將物件繫結至控制項。
ASP.NET 資料來源控制項。
Entity Framework 包括資料來源控制項,而這是專為簡化 ASP.NET Web 應用程式中的資料繫結所設計。 如需詳細資訊,請參閱 EntityDataSource 網路伺服器控制項概觀。
其他考量
下列考量可適用於將特定應用程式類型移轉至 Entity Framework 的情況。
公開資料服務的應用程式。
以 Windows Communication Foundation (WCF) 為架構的 Web 服務和應用程式使用 XML 要求/回應訊息格式公開來自基礎資料來源的資料。 Entity Framework 使用二進位、XML 或 WCF 資料合約序列化來支援實體物件的序列化。 二進位和 WCF 序列化都支援物件圖形的完整序列化。 如需詳細資訊,請參閱建置多層式架構應用程式。
使用 XML 資料的應用程式。
物件序列化可讓您建立 Entity Framework 資料服務。 這些服務為使用 XML 資料的應用程式提供資料,例如以 AJAX 為基礎的網際網路應用程式。 在這些情況下,請考慮使用 WCF Data Services。 這些資料服務是以實體資料模型為基礎,並且使用標準具象狀態傳輸 (REST) HTTP 動作 (如 GET、PUT 和 POST) 來提供實體資料的動態存取。 如需詳細資訊,請參閱 WCF Data Services 4.5。
Entity Framework 不支援原生 XML 資料類型。 亦即將實體對應至具有 XML 資料行的資料表時,XML 資料行的對等實體屬性會是字串。 您可以中斷物件的連接,而且將其序列化為 XML。 如需詳細資訊,請參閱序列化物件。
如果應用程式需要有查詢 XML 資料的功能,您還是可以使用 LINQ to XML 來善用 LINQ 查詢的優勢。 如需詳細資訊,請參閱 LINQ to XML (C#) 或 LINQ to XML (Visual Basic)。
維護狀態的應用程式。
ASP.NET Web 應用程式必須經常維護網頁或使用者工作階段的狀態。 ObjectContext 執行個體中的物件可以存放於伺服器上的用戶端檢視狀態或工作階段檢視狀態內,以便之後擷取或重新附加至新的物件內容。 如需詳細資訊,請參閱連結和中斷連結物件。