Entity Framework (SQL Server Compact)
Entity Framework 是 ADO.NET 中的一組技術,可支援資料導向軟體應用程式的開發。Entity Framework 可讓開發人員使用網域特有之物件和屬性的格式 (如客戶和客戶地址) 來處理資料,而不需要顧慮這些資料儲存在哪些基礎資料庫資料表和資料行內。
Entity Framework 藉由讓開發人員處理更高的抽象層級,因此可支援與任何特定資料儲存引擎或關聯式結構描述無關的程式碼。開發人員可以建立資料存取應用程式,其方式是針對概念應用程式模型進行程式設計,而不是直接針對關聯式儲存結構描述進行程式設計。
Entity Framework 應用程式和服務是由概念模型、儲存模型及兩者之間的對應所組成。為了符合從現有資料庫衍生 Entity Data Model (EDM) 之開發人員的需求,Entity Framework 提供了一組工具,這些工具可產生及驗證 EDM,並根據概念模型建立可程式化類別。
透過 EDM,ADO.NET 會將實體公開為 .NET 環境內的物件。如此可讓物件層成為 Language-Integrated Query (LINQ) 支援的理想目標。LINQ to Entities 可讓開發人員針對 Entity Framework 物件內容建立彈性且強型別的查詢,其方式是直接從開發環境使用 LINQ 運算式和 LINQ 標準查詢運算子。如需有關 Entity Framework 和 LINQ to Entities 的詳細資訊,請參閱<Entity Framework>(英文) 文件集。
3.5 SP1 提供了適用於 Windows 桌面平台的 Entity Framework 支援。
SQL Server Compact 中的 Entity Framework
若要搭配 使用 Entity Framework,請先安裝 Entity Framework。從 .NET Framework 3.5 Service Pack 1 (SP1) 開始,Entity Framework 就是 .NET Framework 的一個元件。
的開發支援是由 Visual Studio 提供。Visual Studio 中 Entity Framework 的 Entity Data Model 設計工具支援是由 Entity Framework 工具所提供。請注意從 Visual Studio 2008 Service Pack 1 (SP1) 開始,Entity Data Model 設計工具 (Entity 設計工具) 就是 Visual Studio 的一個元件。它是用於建立及編輯 Entity Data Model (EDM) 的視覺化工具。如需有關此工具的詳細資訊,請參閱<Entity Framework>(英文) 文件集。
如果您想要使用 Visual Studio 2008,而非 Visual Studio 2008 SP1,請安裝 "Microsoft SQL Server Compact 3.5 SP1 Beta for Entity Framework Beta 3",這個版本會啟用 Entity 設計工具與 之間的整合功能。如需有關如何安裝此 Beta 版的詳細資訊,請參閱 Microsoft 下載中心。
從 3.5 SP1 開始, 提供了 Managed 組件:System.Data.SQLServerCe.Entity.dll。System.Data.SQLServerCe.Entity.dll 組件是由 ADO.NET Managed 資料提供者 System.Data.SqlServerCE.dll 在內部所使用,並可支援 Entity Data Model (EDM) 中所述的資料存取。
當您安裝 SP1 版的 3.5 (SSCERuntime-ENU.msi) 時,System.Data.SQLServerCe.Entity.dll 會安裝在 %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 資料夾底下。
SQL Server Compact 的限制
當 搭配 Entity Framework 使用時的一些限制如下:
當 搭配 Entity Framework 使用時,不支援具有伺服器產生之索引鍵或值的實體。
當使用 Entity Framework 時,實體的索引鍵可能會標示為伺服器所產生。如此可讓資料庫針對插入的索引鍵或實體建立產生值。另外,某個實體可能會有零個或多個屬性標示為伺服器所產生的值。如需詳細資訊,請參閱 Entity Framework 文件集中的<存放區產生的模式>(英文) 主題。
當 搭配 Entity Framework 使用時,並不支援具有伺服器產生之索引鍵或值的實體,但是 Entity Framework 可讓您定義具有伺服器產生之索引鍵或值的實體類型。在具有伺服器產生之值的某個實體上進行資料操作時,將會擲回「不支援」的例外狀況。當 搭配 Entity Framework 使用時,不支援分頁查詢內的 SKIP 運算式。另一方面, 則可支援分頁查詢內的 LIMIT 和 TOP 運算式。
分頁查詢的用意是要透過查詢的結果來支援無狀態分頁 (捲動或視窗型)。
下列範例示範如何使用 LINQ Skip 和 Take 運算子在 Entity Framework 中撰寫分頁查詢。請注意, 不支援分頁查詢中的 SKIP 運算式:LINQ:
customers.OrderBy(c => c.Name).Skip(10).Take(20)
下列範例示範如何使用 Entity SQL 的 SKIP、LIMIT 和 TOP 建構,在 Entity Framework 中撰寫分頁查詢。請注意, 不支援分頁查詢中的 SKIP 運算式:
Entity SQL:
SELECT value c FROM NW.Customers AS c ORDER BY c.Name skip 10 limit 20;
不支援使用 Entity Framework 的完整外部聯結,但是 Entity SQL 則支援完整外部聯結。例如,下列查詢不受支援:
Entity SQL:
SELECT c.Name, c.Id, o.Id FROM NW.Customers AS c FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
請注意, 支援使用 Entity Framework 的內部聯結、左方外部聯結和右方外部聯結。
不支援 Entity SQL 查詢之 ORDER BY 子句中的 COLLATE 子子句。
Entity SQL 允許 COLLATE 子子句可指定為 ORDER BY 子句中每一個索引鍵的一部分。COLLATE 子子句僅適用於字串-值運算式,而且會決定要用於該運算式的比較語意。當 搭配 Entity Framework 一起使用時,並不支援在 Entity SQL 查詢的 ORDER BY 子句中使用 COLLATE 子子句。例如,下列查詢不受支援:
Entity SQL:
SELECT value c FROM NW.Customers AS c ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai
跟 SQL Server 不同的是, 並不支援 real、float、money 和 numeric 資料類型上的模數運算 (以 % 表示)。
在 中,下列查詢會產生錯誤訊息:Entity SQL:
( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) )
Transact-SQL:
SELECT cast (1 as smallint) %cast (1 as decimal(28,4))
當您執行這類查詢時,將會顯示以下錯誤訊息:「real、float、money 和 numeric 資料類型不支援模數。[ Data type = numeric ]」
不支援彙總 (max、min、sum、count) 中的 DISTINCT。
如果您嘗試撰寫在彙總 (max、min、sum、count) 中使用 DISTINCT 的 Entity SQL 和 Transact-SQL 查詢,將會擲回「不支援」的例外狀況。下列範例示範在彙總 count 中使用 DISTINCT 的 Entity SQL 查詢。Entity SQL:
SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
當 搭配 Entity Framework 使用時,不支援命令逾時。
Entity Framework 會啟用命令逾時,其指定方式是利用 ObjectContext.QueryTimeout 屬性或 EntityCommand.CommandTimeout 屬性。
當 搭配 Entity Framework 使用時,不支援逾時。換句話說,命令逾時不能設定為零以外的值。如果設定了連接逾時屬性, 資料庫會擲回 NotSupportedException(“CommandTimeout”) 例外狀況。只支援 Unicode 字串。
Entity Framework 同時提供了 Unicode 和非 Unicode 字串的支援。 只支援 Unicode 字串。目前提供者不支援 'String' 類型的常值 <literal>。非 Unicode 字串中的 會擲回「接近常數常值」的例外狀況。不支援預存程序和檢視。
範例
若要了解如何建立使用 資料庫當做資料來源的 Entity Framework 應用程式,請參閱<建立 Entity Framework 應用程式 (SQL Server Compact)>。
另請參閱
其他資源
建立 Managed 應用程式 (SQL Server Compact)