实体框架 (SQL Server Compact)

实体框架是 ADO.NET 中的一组技术,支持面向数据的软件应用程序的开发。通过实体框架,开发人员可以处理域特定的对象和属性形式的数据(如客户和客户地址),而无须考虑存储此数据的基础数据库表和列。

通过使开发人员可以处理更高抽象级别的数据,实体框架支持独立于任何特定数据存储引擎或关系架构的代码。通过根据概念性应用程序模型进行编程而不是直接根据关系存储架构进行编程,开发人员可以创建数据访问应用程序。

实体框架应用程序和服务由概念模型、存储模型和这两者之间的映射组成。为满足希望从现有数据库派生实体数据模型 (EDM) 的开发人员的需要,实体框架提供了一组基于概念模型生成和验证 EDM 并创建可编程类的工具。

通过 EDM,ADO.NET 可以在 .NET 环境中将实体作为对象公开。这样,对象层就成为语言集成查询 (LINQ) 支持的理想目标。LINQ to Entities 允许开发人员通过直接从开发环境使用 LINQ 表达式和 LINQ 标准查询运算符,根据实体框架对象上下文创建灵活的强类型查询。有关实体框架和 LINQ to Entities 的详细信息,请参阅实体框架文档。

SQL Server Compact 自 SQL Server Compact 3.5 Service Pack 1 (SP1) 开始提供对 Windows Desktop 平台的实体框架的支持。

SQL Server Compact 中的实体框架

若要将实体框架与 SQL Server Compact 一起使用,请首先安装实体框架。从 .NET Framework 3.5 Service Pack 1 (SP1) 开始,实体框架是 .NET Framework 的一个组件。

对 SQL Server Compact 的开发支持由 Visual Studio 提供。对 Visual Studio 中实体框架的实体数据模型设计器支持由实体框架工具提供。请注意,从 Visual Studio 2008 Service Pack 1 (SP1) 开始,实体数据模型设计器(实体设计器)是 Visual Studio 的一个组件。它是用于创建和编辑实体数据模型 (EDM) 的可视工具。有关此工具的详细信息,请参阅实体框架文档。

从 SQL Server Compact 3.5 SP1 版本开始,SQL Server Compact 提供托管程序集 System.Data.SQLServerCe.Entity.dll。System.Data.SQLServerCe.Entity.dll 程序集由 ADO.NET 托管数据提供程序 System.Data.SqlServerCE.dll 在内部使用,它支持访问在实体数据模型 (EDM) 中描述的数据。

安装 SQL Server Compact 3.5 SP1 或更高版本的 SQL Server Compact (SSCERuntime-ENU.msi) 时,System.Data.SQLServerCe.Entity.dll 安装在文件夹 %ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5 之下。

SQL Server Compact 的限制

与实体框架一起使用时,SQL Server Compact 有以下一些限制:

  • SQL Server Compact 与实体框架一起使用时不支持具有服务器生成的键或值的实体。

    使用实体框架时,实体的键可能被标记为服务器生成的。这样,数据库就可以在插入时或创建实体时生成键值。此外,可以将实体的零个或多个属性标记为服务器生成的值。有关详细信息,请参阅实体框架文档中的存储生成的模式主题。

    SQL Server Compact 与实体框架一起使用时不支持具有服务器生成的键或值的实体,尽管实体框架允许您定义具有服务器生成的键或值的实体类型。对具有服务器生成的值的实体进行的数据处理操作会引发“不支持”异常。

  • SQL Server Compact 与实体框架一起使用时不支持分页查询中的 SKIP 表达式。 另一方面,SQL Server Compact 支持分页查询中的 LIMIT 和 TOP 表达式。

    分页查询用于通过查询结果支持无状态分页(滚动或窗口化)。

    下面的示例演示如何使用 LINQ Skip 和 Take 运算符,在实体框架中编写分页查询。请注意,SQL Server Compact 不支持分页查询中的 SKIP 表达式:

    LINQ:

    customers.OrderBy(c => c.Name).Skip(10).Take(20) 
    

    下面的示例演示如何使用实体 SQL 的 SKIP, LIMIT 和 TOP 构造,在实体框架中编写分页查询。请注意,SQL Server Compact 不支持分页查询中的 SKIP 表达式:

    实体 SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name skip 10 limit 20; 
    
  • 虽然实体 SQL 支持完全外部联接,但是 SQL Server Compact 不支持使用实体框架的完全外部联接。例如,不支持以下查询:

    实体 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
    

    请注意,SQL Server Compact 支持使用实体框架的内部联接、左外部联接和右外部联接。

  • SQL Server Compact 不支持实体 SQL 查询的ORDER BY 子句中的 COLLATE 子子句。

    实体 SQL 允许将 COLLATE 子子句指定为 ORDER BY 子句中每个键的一部分。COLLATE 子子句仅适用于字符串值表达式,它确定用于该表达式的比较语义。

    与实体框架一起使用时,SQL Server Compact 不支持在实体 SQL 查询的 ORDER BY 子句中使用 COLLATE 子子句。例如,不支持以下查询:

    实体 SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • 与 SQL Server 不同,SQL Server Compact 不支持对 real、float、money 和 numeric 数据类型执行取模操作(由 % 表示)。

    在 SQL Server Compact 中,以下查询会导致错误消息:

    实体 SQL:

    ( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) ) 
    

    Transact-SQL:

    SELECT cast (1 as smallint) %cast (1 as decimal(28,4)) 
    

    在运行此类查询时,将显示以下错误消息:“实数、浮点、货币和数字数据类型不支持‘模’。[ Data type = numeric ]”

  • SQL Server Compact 不支持聚合(max、min、sum、count)中的 DISTINCT。

    如果尝试编写在聚合(max、min、sum、count)中使用 DISTINCT 的实体 SQL 和 Transact-SQL 查询,将引发“不支持”异常。下面的示例演示在聚合 count 中使用 DISTINCT 的实体 SQL 查询。

    实体 SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • 与实体框架一起使用时,SQL Server Compact 不支持命令超时。

    通过使用 ObjectContext.QueryTimeout 属性或 EntityCommand.CommandTimeout 属性,实体框架允许指定命令的超时。

    与实体框架一起使用时,SQL Server Compact 不支持超时。换句话说,不得将命令超时设置为非零值。如果设置了连接超时属性,则 SQL Server Compact 数据库将引发 NotSupportedException(“CommandTimeout”) 异常。

  • SQL Server Compact 仅支持 Unicode 字符串。

    实体框架提供了对 Unicode 字符串和非 Unicode 字符串的支持。SQL Server Compact 仅支持 Unicode 字符串。当前提供程序不支持类型为“String”的文本 <literal>。在非 Unicode 字符串中 SQL Server Compact 将引发“接近常量”异常。

  • SQL Server Compact 不支持存储过程和视图。

示例

若要了解如何创建将 SQL Server Compact 数据库用作数据源的实体框架应用程序,请参阅创建实体框架应用程序 (SQL Server Compact)

请参阅

其他资源

生成托管应用程序 (SQL Server Compact)