LightSwitch入门系列第二部分:感受关爱——定义数据关系

[原文发表地址]  Beginning LightSwitch Part 2: Feel the Love – Defining Data Relationships [原文发表时间]  2011-12-08 15:25 AM 欢迎来到LightSwitch入门系列的第二部分。在上一篇博文中,我们了解了表或实体,以及在LightSwitch中如何使用数据设计器来定义它们。如果您错过了,可以从这里查看:LightSwitch入门第一部分:表中有什么?描述你的数据。 在本篇博文中,我想要关注在第一部分中建立的数据模型之间的数据关系。关系定义了数据库中一个表中的信息是如何与另一个表中的信息相对应的。或更广义来讲,关系定义了在(或跨)数据源中一个实体如何与另一个实体相对应。您可以将实体之间的关系想象为日常生活中的事物之间的关系。例如,学校与学生之间的关系是一个存在于现实世界中的关系。同样,学生和学生就读的课程之间存在一个真实的关系。在数据模型中,您可能需要一个实体包含学生,以及另一个实体包含他们就读的课程。当您将这两个实体联系在一起时,就创建了一个关系。 创建一个更好的通讯簿 在我们开始的第 一 部分的示例中,我们建立了一个管理联系人的地址簿应用程序。在我们当前的数据模型中,我们为联系人只存储一个电话号码、一个电子邮件地址和一个地址。 然而,在现实生活中,联系人通常有多个电子邮件、 电话号码和地址信息。为了在LightSwitch 中建立的数据库中示范这一点,我们需要定义其他表,并将它们与联系人表关联为一个一对多的关系。一对多关系可能是定义关系中最常见的类型。在我们的例子中,这意味着一个联系人可以有多个电子邮件地址。一个联系人可以有很多的电话号码。一个联系人也可以有许多的物理地址。 让我们从电子邮件地址开始。如果我们想要收集联系人的多个电子邮件地址,我们有几个选择。一个选择是将固定数量的电子邮件属性以Email1、 Email 2、 Email3 的形式添加到联系人中。这意味着对于任何给定的联系人,我们永远不能收集超过 3 个的电子邮件地址。取决于您所构建的应用程序的类型,这可能已经很好了。但是,如果您以相同的方式(此例中的电子邮件)添加太多的属性到表中,那么是时候思考不同的策略了。取而代之的,我们应创建一个EmailAddress表,并定义一个一对多的关系。 在数据设计器中,单击“New Table”按钮,将实体定义为EmailAddress,并添加两个必需的属性:Email(电子邮件地址类型) 和 EmailType (字符串类型)。 对于EmailType,我们将创建一个选择列表,您在该系列的第 一 部分中已经学到它了。此属性将捕获电子邮件的类型,不管是个人还是工作的。我也选择让它的最大长度只有 25 个字符— — 我们永远不需要所有 的255个字符。 为什么我们不将最大长度设为 8 个字符呢,它是选择列表中的最长值的长度?因为如果我们以后需要添加值到选择列表中,如果值超过了 8 个字符,那么我们不会不得不更改数据模型。如今磁盘空间很便宜,所以最好使用较长的最大长度,那样所有数据都可以存在基础表中,这样就避免了经常更改数据模型。 在 LightSwitch 中定义关系 既然我们已经建好了EmailAddress实体,是时候来定义关系了。单击数据设计器顶部的”Relationship…”按钮,这将打开“Add New…

0

开始VS LightSwitch的第一部分:表中有什么?描述你的数据

[原文发表地址]   Beginning LightSwitch Part 1: What’s in a Table? Describing Your Data [原文发表时间]  2011-12-06 15:18 AM 欢迎来到开始LightSwitch系列的第一部分。首先,我们将从LightSwitch应用程序中最重要的构建部分开始,即表。简单来说,表是一种用行和列组织数据的方式。如果你曾用过Excel或其他电子表格应用程序,那么在行中是组织数据,而每列是一个字段,代表你所收集数据的特定类型。例如,以下是一个客户数据表: 客户表 LastName FirstName BirthDate Doe Jane 10/20/1972 Smith John 11/12/1956 当你使用数据库时,数据就以这种方式存储在一系列表中。然后,创建表之间的关系来正确地浏览你的数据。我们将在下一篇博文中讨论关系。至于这篇博文,我们将集中于在LightSwitch 中如何创建和使用表。 LightSwitch 中的表 (实体) 用LightSwitch构建的应用程序是窗体上基于数据的应用程序,它提供用户界面,可查看、 添加和修改数据。LightSwitch通过使用界面和表简化了这些应用程序的开发。因为LinghtSwitch可以使用其他外部数据源,而不一定要使用数据库中的。在LightSwitch中,我们有时将表称为“数据实体”或只是“实体”。所以无论你是在数据库中有个表还是在SharePoint中有个列表,在LightSwitch 中它们都是实体。同样,表中的字段或列表中的列都被称为实体的“属性”。 LightSwitch通过实体来表示数据的,实体对于组建应用程序是必需的。你可以通过内置的应用程序数据库来创建这些数据实体,或者从外部数据库,SharePoint列表,或其他数据源导入数据。当你在LightSwitch中创建新的项目时,你需要选择是否想要附加到现有的数据源中或创建一个新表。如果你选择创建一个新表,LightSwitch 将在内置数据库中创建它,也称为内部数据库。然后你可以使用数据设计器来设计表。 当你创建表并将它们互相关联时,其实你是在设计数据模型或架构。如果你从没做过的话,以这种方式描述你的数据需要一些练习,但是,你将看到通过使用 LightSwitch,它是非常直观的。你的数据模型描述得越好,在你以后创建界面时, LightSwitch 可以为你做越多。 LightSwitch 数据设计器 无论你附加到现有的数据源还是创建新的数据库,数据设计器是LightSwitch中你所有的数据建模发生的地方。通过使用数据设计器,你可以定义你的实体的属性,并创建它们之间的关系。LightSwitch 将会为你处理许多典型的数据管理任务,例如字段验证、 事务处理、 和并发冲突解决方案,但你也可以通过在属性窗口修改属性来自定义这些任务,和/或通过编写代码来覆盖或扩展它们。 查看数据设计器,请看数据: 应用程序背后的信息 有关如何使用数据设计器的视频演示,请参见: 我如何:在LightSwitch应用程序中定义我的数据 创建一个"联系人"实体 让我们通过一个具体的例子来创建一个实体。假设我们想要创建一个应用程序来管理联系人,就像一个地址簿一样。我们需要创建一个存储联系人数据的实体。首先打开Visual Studio LightSwitch…

0

在Visual Studio LightSwitch里如何连接到SQL Express 数据库以及创建图表

原文发表地址 How to Connect to and Diagram your SQL Express Database in Visual Studio LightSwitch 原文发表时间 2011 10-27 3:08 PM 通过使用数据设计器,Visual Studio LightSwitch可以轻松地创建和塑造数据库表。通过该设计器,数据模型的表、行以及关系之间有了一个简单的界面。当你以这种方式创建表时,LightSwitch 在后台创建了一个SQL Express 数据库文件。SQL Express是伴随Visual Studio LightSwitch一起安装的,并且它需要正常运行。当你准备部署应用程序时,你可以把它部署在包括SQL Azure版本的任何SQL Server版本上,然而在开发过程中,LightSwitch 开发环境是通过SQL Express来管理数据库的。我们称之为内部数据库。 很多人问我如何创建我上一篇文章中所说的数据库关系图,我在其他Visual Studio论坛上也看到了这个问题。Visual Studio的所有版本(不仅仅是LightSwitch)允许你通过Server Explorer 窗口来连接到SQL Server。这样你就可以浏览表和数据。但是获得图表的支持对大家来说是件神秘的事情。所以在本篇博客中,我将给大家展示如何在本地开发机器上获取它。 请注意:这项技术需要你有机器的管理员权限,并且以管理员身份安装Visual Studio(因此SQL Express也需要安装)。此外这项技术只用于开发环境。 连接到Server Explorer 打开Server Explorer (按Ctrl+Alt+S组合键),连接到内部数据库 然后右击Data Connections,选择“Add Connection…”来添加一个新的连接 我们需要连接到磁盘上特定的数据库文件,而不是附加的数据库。在开发过程中LightSwitch创建了一个所谓User Instance的数据库,当访问时它可以动态附加到SQL Express 服务上。这样,将LightSwitch开发解决方案和示例从一台机器上拷贝到另一台机器上就有了可能,而且不会丢失任何关键的数据信息。 所以当”…

0

在数据输入屏幕上筛选有大量数据的查询列表

原文发表地址 Filtering Lookup Lists with Large Amounts of Data on Data Entry Screens 原文发表时间 2011 9-15 3:53 PM 在数据输入屏幕上筛选有大量数据的查询列表 首先我想说,能回来继续写博客真好。真不好意思我离开了几周——从旅行归来后我一直在内部做一些很酷的东西。我收到了许多你们对于文章和视频的建议,非常感谢你们一直以来那么包容我。今天我要向你们展示创建数据输入屏幕时另一个常见(且必要的)技术。 在我之前关于数据驱动查询列表(有时称为“选择列表”)的博文里,我展示了一些格式化,编辑和添加数据的技巧。如未看到这些博文,请参见以下链接: 如何在LightSwitch中创建多栏自动完成下拉框 如何在LightSwitch中允许向自动完成下拉框添加数据 在这篇博文中我会向你展示一些不同的方法,来帮助用户在数据输入屏幕上从大量查找列表数据中做选择。比如,假设我们产品与分类间有一对多的关系,在输入新产品时我们就要从自动完成框中选择一个分类。LightSwitch会根据我们创建产品的屏幕自动生成这个分类。然后我们就可以为它设置格式,就像我在先前的例子中展示的那样。 现在假定我们设定了上百甚至上千种产品的分类,在为我们的客户创建订单时,我们需要从中选择。这就是我将要使用的数据模型——它显示了一个产品要在一个OrderDetail行项目上被选中。OrderDetail有一个父OrderHeader栏,这个父栏又从属于一个父客户栏,就像good ‘ol Northwind那样。 在上面的产品屏幕上,只有20个分类,所以在下拉分类表中显示所有的查询列表数据不成问题。但是,对有许多数据的产品表来说这不是最佳的选择——要下拉数据太多,一下子显示会比较困难。这对我们的用户来说也许也不是一个很有成效的选择,无论他们想上下滚动浏览数据,或了解他们寻找的产品名称来使用自动完成框。更好的方案是使用,能支持更多的搜索选项并为数据分页的模态窗口选取器。或通过给出分类下拉栏,筛选用户首先选择的产品列表。我们来详细看看这两种方法。 使用模态窗口选取器 假定我选择了编辑详情屏幕模板来创建一个屏幕以输入OrderDetail记录。根据默认设置,LightSwitch会自动生成一个产品自动完成框。这同样也适用于OrderHeader,因为它也是OrderDetail的父类。在这个屏幕上,我不想让用户来改变OrderHeader,所以我会把它变成一个总结控件。我还会把产品上的自动完成框将变成模态窗口选取器: 我还想让产品按照字母排列显示,所以我还创建了一个名为“SortedProducts”的查询,然后在屏幕顶端选择“添加数据项”,然后选择SortedProducts查询: 给屏幕添加完查询后,选择目录树中的产品,设置“Choices”属性从“Auto”改为“SortedProducts”。 你还可以决定每页显示多少行的数据,只要选择SortedProducts查询,然后在属性窗口设置每页显示项数即可。默认设置是每页45行。 现在点击F5运行应用,看看结果。注意当你运行屏幕时,你可以选择Product旁的省略号,调出模型窗口选取器。用户可以搜索并为数据分页。这对用户来说不仅方便了查询,而且对服务器来说也很高效。 使用经筛选的自动完成框 另一个技巧就是使用一个自动完成框作为筛选器进入下一个分类。这限制了需要被下拉并显示给用户的选择数量。如果你有级联筛选列表的话,这个技巧会非常有用。第一次的选择筛选了第二个筛选的数据,然后第二个再筛选下一个的数据,以此类推。数据可以来源于同一个表,也可以像我例子中那样来源于不同的表——你要做的就是在屏幕上正确设置查询,这样它们就可以被适当地选择筛选了。 返回上面的OrderDetail屏幕,把产品目录项设回自动完成框控件。然后我们要为屏幕添加一个数据项来跟踪被选分类。我们会用这个分类来决定产品列表上的筛选器,所以用户只会看见被选分类中的产品。再次点击“添加数据项”,这次添加一个名为“SelectedCategory”本地分类类型属性。 然后,把SelectedCategory拖到上述产品的目录树上。LightSwitch会自动创建自动完成框控件。 如果你还想给分类列表分类,可以参照我们对产品的分类方法,依照个人喜好创建一个查询,为屏幕添加数据项,然后把选择属性从自动设到查询。 现在我们要对根据分类筛选的产品创建一个查询。有两种方法。你可以创建一个新的名为ProductsByCategory的全局查询,如果这个查询只为这个特定的屏幕使用,你可以点击我们之前添加的SortedProduct查询旁边的编辑查询。我们采用的是这种做法。这会打开查询设计器,你可以在屏幕上本地修改查询。点击+Filter按钮,在Category.Id上添加一个参数化的筛选,然后在第二个下拉栏中选择Category.Id,在第四个下拉栏中选择参数,在最后一个下拉中选择“Add New…”来创建一个参数化的询问。你也可以让这个参数可选或者必选。我们将其设为必选,这样用户就必须在产品显示前选择分类了。 最后我们要连接参数绑定。回到屏幕,选择刚在SortedProducts查询上创建的Id参数,在属性窗口设置参数绑定到SelectedCategory.Id。完成此项操作后,左边灰色列中会显示绑定。 设置查询参数值后,LightSwitch会自动执行查询,你无需编写额外的代码。点击F5看看结果。注意现在产品下拉列表是空的,你必须先选择一个分类,满足SortedProducts查询,然后执行。还有就是如果你做了产品选择,然后改变了分类,选择仍会显示,不会消失。只要记得每次用户改变分类,产品查询都会在服务器上重新执行一遍。 除此之外,你还可能想做的是显示产品所属初始分类。当屏幕打开时,选择分类是空白的。这是因为它是和屏幕属性绑定的,而属性不支持数据。不过我们可以在代码中设定SelectedCategory的初始值。回到屏幕设计器,在右上方下拉有“编写代码”按钮,选择InitializeDataWorkspace方法,编写以下代码: 1: Private Sub OrderDetailDetail_InitializeDataWorkspace(saveChangesTo As List(Of IDataService)) 2: ‘ Write your…

1