VS 2013 LightSwitch 入门第一部分:表里面是什么?你的数据描述

[原文发表地址] Beginning LightSwitch in VS 2013 Part 1: What’s in a Table? Describing Your Data

[原文发表时间] 2013-10-16 4:45 PM

注:这是Visual Studio 2013更新的非常受欢迎的LightSwitch入门文章系列,关于以前的版本,请参见:


欢迎来到Visual Studio 2013的LightSwitch系列课程第一部分! 首先,我们从LightSwitch应用程序创建中最重要的一块(表)开始。简单的说,表是一种通过行和列组织数据的一种方式,如果你曾用过Excel或者其他的电子表格应用程序,在其中以行为单位来组织数据,然后每行中的每一列代表一个指定数据类型的字段。举个例子,这就是一张关于客户数据的表:

Customer 表.

LastName

FirstName

BirthDate

Doe

Jane

10/20/1972

Smith

John

11/12/1956

当你使用数据库时,数据就是以这样的方式存储在一系列表中。然后通过数据字段创建不同表与表之间的关系。我们将在下一篇文章中讨论表之间的关系,在这篇文章中,让我们只专注于如何在LightSwitch中创建和使用表。

LightSwitch表集(实体集)

使用LightSwitch创建的应用程序是以数据为中心的应用程序,它为用户提供接口用于查看,添加以及修改数据。LightSwitch使用界面和表简化了上述应用程序的开发。因为LightSwitch可以与其他外部数据源一起工作,这些数据源不需要一定来自数据库。在LightSwitch中,我们有时将表集称作“数据实体集”或者直接叫做“实体集”。所以无论你是数据库中的一个表或者SharePoint中的一个列表,它们在LightSwitch中都是“实体集”,同样地,一个表中的某一字段或者列表中的某一列都是被当作实体的一个属性。

实体集是LightSwitch用于展示数据以及组建应用程序非常必要的一个部分。你可以使用LightSwitch内置的数据库来创建数据实体集,或者从外部数据库,Odata服务,一个SharePoint列表或其他的数据源中导入数据。当你在创建一个新的LightSwitch工程的时候,你需要选择是否想要附加一个已经存在的数据源或者创建一个新的表,如果你选择创建一个新的表,LightSwitch将在内置的数据库中(也称作本真数据库)创建它。然后你就可以使用数据设计器来设计表了。

当你创建表集以及将它们关联在一起的时候,你就是在设计一个数据模型,或者数据架构。这种描述数据的方式,如果你以前没有做过的话,就需要多练习几遍。然而,你会发现使用LightSwitch非常的直观。如果你能够很好的描述你的数据模型,那么在后面创建界面的时候LightSwitch将会帮助到你更多。

LightSwitch 数据设计器

数据设计器是LightSwitch中所有数据模型化的工具,无论你是附加一个已存在的数据源或者创建一个新的数据库。使用数据设计器,你可以对你的实体集定义属性,创建实体集之间的关系。LightSwitch能够为你处理很多典型的数据控制任务,比如字段验证,业务处理以及并发冲突的解决方案,你也可以在字段属性窗口中更改属性值来自定义这些任务,或者通过代码来对这些属性进行重写或者扩展。

LightSwitch不仅为你在模型化实体时管理底层数据库表,它还自动创建了一个服务层,可以通过Odata协议公开数据。这样就允许其他的商业系统和外部的客户端(像Excel就是一个例子)非常容易和安全的连接到你的数据。你在实体集中定义的任何商业逻辑和用户权限都会被很好的执行,无论什么客户端访问你的这些服务。

关于数据设计器的参考,请参阅Data: The Information Behind Your Application

关于如何使用数据设计器的视频演示,请参阅: How Do I: Define My Data in a LightSwitch Application?

关于更多LightSwitch中的OData服务,请参阅: Creating and Consuming LightSwitch OData Services.

关于更多LightSwitch应用程序的整体结构,请参阅: Exploring LightSwitch Architecture

创建一个“Contact”实体

我们来演练一个具体的创建实体的例子,假设我们想创建一个管理联系人的应用程序,像一个地址薄。我们需要创建一个实体来存储联系人的数据。首先打开Visual Studio 2013 (专业版或者更高版本)。然后选择编程语言,Visual Basic 或者 C#,接着选择LightSwitch节点和将要创建的LightSwitch应用程序类型。在这个系列中,我们要创建一个HTML应用程序。(如果你想创建一个Silverlight桌面应用程序,请参阅Visual Studio 2012系列。)将工程命名为ContractManager。

在你点击新建工程对话框上的OK以后,LightSwitch主页面会询问你是否想要创建一个表或者附加一个外部数据源。

点击“创建新表”,就会弹出数据设计器。现在你可以开始描述联系人实体了,当窗口打开以后,你的光标会坐落在实体窗口的标题栏。将其命名为“Contract”然后点击Enter键。

一旦你这样做你就会在解决方案中数据源文件夹下的ApplicationData节点中看见“Contracts”。ApplicationData代表LightSwitch为你创建的内部数据库。Contracts指的就是数据库中存储所有的联系人记录的那个表。你也可以将其想象成实体集,这就是为什么LightSwitch多元化的原因。

现在我们需要开始定义实体的属性,和表中的列(或者字段)关联。你应该注意到Contract实体有一个称作“Id”的属性,这个属性不可以更改。这个内部字段代表一行特定数据的唯一键值。当你模型化数据库中的表时,表中的每一行必须都有一个唯一的键值,所以一个特定的行才能在表中被定位。这个Id属性名称左边会有一个被称作主键的标识。这是必须的,唯一的,它会以一个整型进行存储。LightSwitch会自动为你管理这些主键。

所以我们现在需要考虑我们想要捕捉那些属性在一个联系人记录中。还需要决定以何种类型存储指定的数据以及该字段的值是否是必须的。我已经选择好存储下面这些数据:LastName,FirstName,BirthDate,Gender,Phone,Email,Address1,Address2,City,State和ZIP。另外只有LastName是必须的,其它的字段的值就不强制用户输入了。

你也注意到了我选择的数据类型与我想要存储的数据类型匹配的非常紧密。例如电话号码和邮件地址我选择了使用“Phone Number”和“Email”类型,这些业务类型在界面上为你提供内置的验证和编辑功能。这些数据在底层表中仍然是以字符串的形式进行存储,在界面上它将为你进行自动格式化和验证。验证用户的输入对保持数据的一致性是非常重要的。在属性窗口中你可以设置这些规则,像字段的值是必须的,字符串类型的值的最大长度,数值类型的属性的有效值区间,日期类型的值的日期区间,以及其他的一些设置。你也可以自己定义一些验证的代码。

如果你看不见属性窗口,就点击一下F4打开它。在实体上选择一个属性然后你会看见一些相关的设置,你可以根据下方的视图配置它。服务器的视图允许你配置存储和验证属性以及默认的字段显示名称。

根据你选择的不同数据类型,你会看到不同的一些设置项目。在属性窗口中所有的属性都有一个都有一个“外观”模块,在你里你可以指定其显示名称,这个名称会显示在应用程序的屏幕上的字段标签栏。默认情况下,如果你对你的实体属性使用驼峰命名法(a.k.a Pascal Case),LightSwitch就会在一个短语中间放入一个空白字符。举个例子,“LastName”属性的显示名称就会自动变成“Last Name”。所以这个例子对你的实体属性一个很好的示范。

如果想支持多语言,你可以将显示名称用资源标识符作为代替,更多详情,请参阅演练:Localizing a LightSwitch Application

你在数据设计器中的所有设置都会影响到应用程序的显示,虽然你可以根据需要做其他的自定义特殊的显示处理,但是你会花很多的时间来在设计器上配置你的数据模型。这样,你就不必每次都在创建一个新的视窗的时候做很多显示设置了。在创建一个新的用户界面的时候,你对你的实体模型化工作做得越好,LightSwitch就能为你做更多自动化的事情。

对于联系人实体,我们来做一些额外的设置。首先,选择Id字段,在打开的字段属性窗口中的外观区域,取消选择“默认显示”。这样这个字段就不会在用户界面的任何一个地方显示了。前面说过,主键是一个内部字段,用于定位表中的每一行而且不可以被更改,所以用户没必要再应用程序的显示端看到它。

对于BirstDate字段,设置其最小值为1/1/1900,这样用户就不能输入这个日期以前的一个日期。

你可以在这里为其设置一个最大值,但是这样的话就会在验证代码中硬编码一个静态的值。然而,我们可能想要的是动态的验证这个值。事实上,我们通常都会写一段代码来执行一个常见的数据验证功能。举个例子,假设我们想确保用户输入的日期不是一个未来的日期?在属性窗口中点击“自定义验证”,然后提供验证代码来进行验证。这个验证会在服务器端的任何时候执行当联系人正在保存的时候。

VB:

    1: Private Sub BirthDate_Validate(results As EntityValidationResultsBuilder)
    2:     'Write code here:
    3:     If Me.BirthDate.HasValue AndAlso Me.BirthDate > DateTime.Today Then
    4:         results.AddPropertyError("Birthdate cannot be in the future.")
    5:     End If
    6: End Sub

C#:

    1: partial void BirthDate_Validate(EntityValidationResultsBuilder results)
    2: {
    3:     //Write code here:
    4:     if (this.BirthDate.HasValue && this.BirthDate > DateTime.Today)
    5:     {
    6:         results.AddPropertyError("Birthdate cannot be in the future.");
    7:     }
    8: }

关于更多验证的规则,请参阅:Common Validation Rules in LightSwitch Business Applications

对于性别,我们想要为用户显示一个静态的值的集合:“女”,“男”。为了在LightSwitch中做到这一点,我们可以用一个选择列表。一个选择列表非常适合于那些总是静态的和相对较少的选项,如这个地方的性别或者“是/否”这些值。如果一个选择列表时一个动态的(或者非常庞大的列表),你应该创建一个表来负责查找其值以及通过多对一的关系关联到你的主表上。这会引起LightSwitch自动的在应用程序界面上创建一个选择列表。在下一篇博客中有更多的关于关系方面的内容。

在属性窗口中点击“选择列表”,会打开一个窗口,让你定义这些值以及你希望用户看到的显示名称,这些值是会被保存到表中。在这里,我们只是想存存储一个“F”或者“M”在底层数据库表中。因此设置其最大长度为1.

默认情况下,字符串的最大长度被设置为255个字符,这样可以处理更多的情况。但是如果你需要你也可以更改它。(注:如果你想在数据库中存储一个varchar(max)的字符串,只需要在这里把255清除使输入框保持空白就可以了。)

使用属性窗口可以配置实体本身,在服务器端视图选择联系人实体标题栏。你会注意到属性窗口中“打开创建/修改属性”复选框默认被勾上。当被复选框被勾上时,LightSwitch就会被告知将自动跟踪记录什么时间被谁创建或者修改。这样做就会在表中自动添加4个字段:Created(DataTime),CreatedBy(String),Updated(DataTime)以及UpdatedBy(String)。这些字段在数据设计器中不会自动显示,但是它会出现在界面设计器中,这样你就可以选择是否显示它们。

现在我们切换到客户端视图。注意这里有一个称作是摘要属性的设置。摘要属性是用于描述你的实体以及当一行记录呈现在屏幕上的时候LightSwitch决定将显示什么。默认情况下,LightSwitch会选择你在实体上定义的第一个字符串属性,但是你可以在这里修改它。

关于更多摘要属性的信息,请参阅:Getting the Most out of LightSwitch Summary Properties

测试联系人实体

现在我们已经有了一个设计好的联系人实体,让我们来创建一个界面来快速测试一下。在数据设计器的顶端点击“界面…”按钮打开添加一个新的界面对话框。我们将在以后的帖子中讨论更多界面相关的内容,但是现在请选择浏览数据界面。然后展开界面数据下拉框,选择Contracts后点击OK。

这样会打开界面设计器,默认界面中展示了一个简单Contracts列表,我们以后将会讨论更多如何自定义界面的内容。现在,让我们为这个应用程序添加一些添加/编辑联系人功能。展开命令菜单节点,点击添加…按钮,会打开添加按钮对话框,然后选择一个已存在的方法:addAndEditNew。

请注意,LightSwitch提供了预定义动作来自动地与我们的实体交互。我们后面将会深入到这些命令。

当我们选择了addAndEditNew命令后我们也需要指定要跳转到的界面,LightSwitch检测到我们需要一个新的界面,所以只需要在这里点击OK。这样会根据我们所有的选择再次打开添加新界面的对话框。点击OK,来为我们的应用程序添加一个新的AddEditContract界面。

我们也可以在用户点击联系人列表中的一个联系人时候添加一个事件将两个界面串联起来,这样他们也可以编辑联系人详细信息。返回到BrowseContract界面,选择Contracts列表,在属性窗口中点击动作选项卡。

选择一个已知的的方法,但是这次选择editSelected。LightSwitch会自动注意到我们已经有一个合适的界面并且将其自动为我们添加好了,点击OK。

点击F5来编译并打开应用程序。现在你可以使用这个界面输入更多地联系人信息到Contract表中。点击下方的添加新联系人按钮来添加新的联系人。

请注意,如果我们不输入Last Name,就会在界面上出现一个错误,提示这是一个必须的字段。同样,如果你输入不符合我们之前定义的非法数据的话,同样会有验证错误的消息显示出来。请注意,当你调整界面尺寸时,LightSwitch将会自动调整你的界面布局。这种响应设计使得应用程序会非常友好的在平板电脑,手机,已经任何现代化的设备上显示,只要它支持HTML5。

关于更多用户体验,LightSwitch提供了它自己的THML客户端,请参见:A New User Experience

当我们完成编辑,点击对话框中上方保存按钮。这就会将你的数据保存在你使用的开发数据库中,开发这个应用程序只是测试数据被保存在你的内部数据库中。真实的数据要直到你发布你的应用到你的用户以后才会进入系统。

在下一篇帖子中,我们将基于我们的数据模型来讨论关系以及编译,下次再见。

非常开心!