LINQ to Entities 概述

目前,编写大多数业务应用程序的目的是访问关系数据库中的数据。有时,这些应用程序将不得不与以关系格式表示的数据进行交互。关系模型已经过优化,可以高效地进行存储和检索,但并未针对在面向对象的编程中使用的概念性建模进行优化。多个规范化表通常对应于单个类,并且类之间的关系并未按照与表之间关系一样的方式表示。业务应用程序开发人员常常必须使用两种或更多种编程语言:对于业务逻辑和表示层使用高级语言(如 Visual C# 或 Visual Basic),而使用查询语言与数据库交互(如 Transact-SQL)。这要求开发人员精通多种语言才能奏效,同时也导致在开发环境中语言不匹配。例如,使用数据访问 API 针对数据库执行查询的应用程序通过使用引号将查询指定为字符串文字。此查询字符串对于编译器是不透明的,并且不检查查询字符串中是否存在错误(如语法无效或它引用的列或行是否确实存在)。此时,既不对查询参数进行类型检查,也不提供 IntelliSense 支持。

实体框架 使开发人员能够以特定于域的对象和属性(如客户和客户地址)格式使用数据,而不必考虑存储此数据的基础数据库表和列。有关更多信息,请参见 实体数据模型。LINQ 使开发人员能够在其应用程序代码中设计基于集的查询,而不必使用单独的查询语言。通过 实体框架 的对象服务基础结构,ADO.NET 在 .NET 环境中将公共概念性数据视图(包括关系数据)作为对象公开。这就使得对象层成为实现 LINQ 支持的理想目标。这一 LINQ 技术(即 LINQ to Entities)使开发人员能够通过使用 LINQ 表达式和 LINQ 标准查询运算符,直接从开发环境中针对 实体框架 对象上下文创建灵活的强类型查询。查询以编程语言自身表示,而不作为应用程序代码中嵌入的字符串文本,但后者通常用于在 Microsoft .NET Framework 2.0 版上编写的应用程序。编译器将捕获语法错误以及成员名称和数据类型中的错误,并且编译时将报告这些错误,同时减少了在 实体数据模型 与应用程序之间出现类型问题的可能性。

LINQ to Entities 查询使用对象服务基础结构。ObjectContext 类是作为 CLR 对象与 实体数据模型 进行交互的主要类。开发人员通过 ObjectContext 构造泛型 ObjectQuery 实例。ObjectQuery 泛型类表示一个查询,此查询返回一个由类型化实体组成的实例或集合。返回的实体对象可供更新并位于对象上下文中。这同样适用于作为匿名类型的成员返回的实体对象。

本节内容

另请参见

其他资源

LINQ to Entities