在代码中使用与数据相关的对象

LightSwitch 生成描述数据的对象和成员。这些对象和成员的名称与您解决方案中的项名称相匹配。例如,如果添加名为 Customer 的表格,则 LightSwitch 将生成名为 Customer 的对象。本主题概述了由 LightSwitch 生成的每个对象类型。要查看使用这些对象和成员执行与数据相关的常规任务的代码示例,请参见使用代码执行与数据相关的任务

生成对象和成员的层次结构

下图对生成的数据模型对象和成员进行了汇总。

生成的对象的层次结构

Application

Application 对象提供对应用程序中对象的顶级访问。要访问 Application 对象,打开代码编辑器中的任何用户代码文件,然后输入 Application。在您键入 Application 然后键入 “.” 后在 IntelliSense 中出现的方法和属性类型会根据在其中编写代码的代码文件进行一些更改。在大多数情况下,您可以使用 Application 对象的属性来获得表示当前用户的对象。

数据工作区

DataWorkspace 对象是所有数据访问中的顶级对象。DataWorkspace 对象包含项目中每个数据源的属性。例如,如果您有名为 NorthwindData 的数据源,则 LightSwitch 将生成名为 NorthwinddData 的属性。当在代码编辑器中键入 DataWorkspace 时,则下拉列表中 NorthwindData 属性将可用。

下图显示了下拉列表中可能出现的一些生成的成员。

DataWorkspace 对象的数据源属性

数据源

LightSwitch 为项目中的每个数据源都生成一个对象。此对象包含您可以用来访问数据的成员。数据源对象的成员包括实体集属性和查询方法。

下图显示了下拉列表中可能出现的一些生成的成员。

数据源对象的成员

Gg445195.collapse_all(zh-cn,VS.110).gif实体集属性

实体集属性返回实体集合。LightSwitch 为数据源中的每个实体生成实体设置属性。例如,如果您的数据源包含一个名为 Customer 的实体,则 LightSwitch 会生成一个名为 Customers 的属性。您可以使用 Customers 属性获得表示 Customer 实体集合的 EntitySet 对象。

EntitySet 对象还包含使您能够检查当前用户是否有权限读取、 更新或删除集合中实体的成员。有关更多信息,请参见 使用代码执行与数据相关的任务

说明说明

EntitySet 是几种类型的实体集合对象之一。要优化代码性能,请确保您正在编写的业务逻辑类型使用了正确的实体集合对象类型。有关详细信息,请参见“实体集合对象和性能”。

Gg445195.collapse_all(zh-cn,VS.110).gif查询方法

查询方法可获得查询结果。LightSwitch 生成一种在您的数据源中定义每个查询的方法。方法名称与查询名称相符。查询可以返回单个实体或 IDataServiceQueryable 类型的实体集。

说明说明

IDataServiceQueryable<T> 是几种类型的实体集合对象之一。要优化代码性能,请确保您正在编写的业务逻辑类型使用了正确的实体集合对象类型。有关详细信息,请参见“实体集合对象和性能”。

默认情况下,LightSwitch 将为数据源中每个实体生成下面的查询方法。

  1. <实体名称>_Single。

  2. <实体名称>_SingleOrDefault。

这两种方法都接受主要的关键部分,并返回单个实体对象。如果不返回任何实体,则<实体名称>_ Single 方法将引发异常,而<实体名称 >_SingleOrDefault 方法将返回 Null 值 (在 Visual Basic 中,返回 Nothing)。

实体

LightSwitch 为实体集合中的每个实体生成 EntityObject。例如,如果您的代码检索到命令集合,则集合将包含表示每个命令的 EntityObjectEntityObject 包含可用于删除实体、读取或更新的实体的属性值或获取相关的实体的成员。可以从诸如 EntitySet 等实体集合对象或通过调用返回实体的查询方法,获得 EntityObject 。有关更多信息,请参见 使用代码执行与数据相关的任务

下图显示名为 myOrder 的 Order 实体的成员。Order 实体包含诸如 OrderDate、OrderID 和 Freight 的实体属性。Order 实体也有可用于获取有关 Order_Details 集合和下订单的 Customer 的成员。

实体对象的属性

在此示例中,Customer 属性返回 Customer 实体。Customer 实体位于 Customer-Order 关系的一端。

Order_Details 属性将返回 Order_Details 实体的集合。Order_Details 实体位于 Order-Order_Details 关系的多端。Order_Details集合对象的类型是 EntityCollection

此图还显示了一个名为 Order_DetailsQuery 的属性。以 Query 结束的属性返回 IDataServiceQueryable 对象。

说明说明

EntityCollectionIDataServiceQueryable 是两种类型的实体集合对象。要优化代码性能,请确保您正在编写的业务逻辑类型使用了正确的实体集合对象类型。有关详细信息,请参见“实体集合对象和性能”。

实体集合对象和性能

当您使用 LINQ 表达式中的实体集合对象时,LightSwitch 将执行从服务器层检索实体的操作。您所使用的对象的类型决定了 LightSwitch 是检索集合中的所有实体还是仅检索其中的一个子集。为确保您的代码按预期方式执行,为您正在编写的业务逻辑选择最适当类型的集合对象。有两类实体集合对象:使 LightSwitch 远程评估 LINQ 表达式的对象,以及使 LightSwitch 在本地评估 LINQ 表达式的对象。

Gg445195.collapse_all(zh-cn,VS.110).gifLINQ 操作:远程与 . 本地执行

如果使用 LINQ 表达式中的 EntitySetIDataServiceQueryable 对象,则 LightSwitch 会将整个 LINQ 表达式传递给服务器层的数据服务。然后,该表达式的结果将传回到调用代码。这种类型的查询执行执行得很好,因为只有满足查询的实体才能返回到调用代码。但是,只有查询运算符的一个子集受数据服务的支持。如果您的表达需要其他 LINQ 运算符,请考虑使用其他类型的集合对象。

下面的插图显示了一个使用 IDataServiceQueryable 对象的 LINQ 表达式。此示例演示将整个表达式传递给数据服务并只返回满足查询条件的 Order 实体的 LINQ 操作。

远程执行查询表达式

如果您使用 LINQ 表达式中的 EntityCollectionIEnumerable 对象,则 LightSwitch 不会将表达式传递给数据服务。相反,LightSwitch 会检索给定类型的所有实体。然后,该表达式将应用到本地的整个集合。如果一个实体集合很大,则这种类型的查询执行可能会对性能造成负面影响。但是,您的代码可以使用全套的 LINQ 运算符。此外,如果您要将完整集合实体传递到您代码中的其他方法,这种方法也可能会有用。

下面的插图显示了一个使用 EntityCollection 对象的 LINQ 表达式。此示例演示检索特定客户的所有 Order 实体的 LINQ 操作。然后,查询的条件将应用于本地的整个集合。

本地执行查询表达式

Gg445195.collapse_all(zh-cn,VS.110).gif示例:获取代码中的实体集合对象

下面显示如何获取 Northwind 示例数据库中 Order 实体的集合。

获取此实体集合对象

使用此代码

远程或本地执行

EntitySet

DataWorkspace.Northwind.Orders

myOrder.Details.EntitySet()

Remote

IDataServiceQueryable

myCustomer.OrdersQuery

DataWorkspace.Northwind.Orders.GetQuery()

Remote

EntityCollection

myCustomer.Orders

Local

IEnumerable

myCustomer.OrdersQuery.Execute()

DataWorkspace.Northwind.Orders.GetQuery().Execute()

Remote

请参见

概念

使用代码执行与数据相关的任务

在 LightSwitch 中编写代码

其他资源

数据:应用程序背后的信息