VS 2010 SP1 和 SQL CE

摘要:VS 2010 SP1 和 SQL CE


原文发表位置:VS 2010 SP1 and SQL CE

原文发表时间:January 11, 2011

上个月我们发布了VS 2010 Service Pack 1 (SP1)Beta . 你可以在Jason Zander的两篇文章和Scott Hanselman包含了VS 2010 SP1 Beta的一些新功能的文章中了解更多关于VS 2010 SP1 Beta的消息。你可以从这里下载和安装VS 2010 SP1 Beta。

上周我发表了关于VS2010 SP1中新增的对 IIS Express的支持的文章。今天的文章中我将要讨论一些支持SQL CE的VS2010 SP1工具支持,并且逐步讲一些它实现的很酷的应用场景。

SQL CE—它是什么?为什么要关注它?

SQL CE是一个免费的,可嵌入的数据库引擎,它使数据库保存变得容易。

不需要数据库安装

SQL CE使你不必执行可执行程序或者安装一个数据库服务器来使用它。你可以简单地把SQL CE文档复制到ASP.NET应用程序的bin目录中,然后你的web应用程序就能把它当作数据库引擎来用。执行时不需要安装或安全许可。在机器上你不必具有管理员账户。只要把你的web应用程序复制到任何一个服务器上,它就能工作。对执行在虚拟主机环境中的中度信任应用程序也是如此。

SQL CE在ASP.NET应用程序的内存中执行,当你第一次访问一个SQL CE数据库时它会启动,并且当应用程序被卸载 (unload) 后它会自动关闭。SQL CE数据库被作为ASP.NET应用程序中的App_Data下的文档形式保存。

使用已有的数据API

SQL CE4使用现有的基于.NET的数据API,也支持SQL服务器相容的查询语法。这意味着你可以使用现有的数据API像ADO.NET,也可以使用高级别的ORM,例如 Entity Framework 和配有SQL CE的Nhibernate。这使你可以使用你现在所掌握的同样的数据库程序设计技术和数据API。

支持开发,测试和生产案例

SQL CE可被用在开发案例,测试案例和轻量级的产品使用案例。在SQL CE4版本中我们已经做了一些工程技术工作来确保在多线程服务器场景(比如 ASP.NET)中,SQL CE不会出现故障或死结。这是针对SQL CE上一个版本的一个大的改动—之前是只为客户场景设计的,这显然阻碍了其在web 服务器环境中的执行。从SQL CE4开始, 你也可以在web服务器中使用它。

SQL CE没有许可证限制,它也是完全免费的

很容易移植到SQL服务器

SQL CE是一个嵌入式数据库—这使得它对开发,测试,和轻量级的使用场景是很理想化的。对于高容量的网站和应用程序,你也许想把数据库迁移至使用SQL Server Express(这是免费的),SQL Server或SQL Azure。这些服务器有更好的可扩充性,更多开发功能(功能如预存进程—SQL CE不支持),也包括更多高级数据管理能力。

我们将发布迁移工具,这可以使你根据需要使用SQL CE数据库,并很容易地把它们升级到使用SQL Server Express,SQL Server,或SQL Azure。当把一个SQL CE数据库升级到SQL Server或SQL Azure时,你不必改变程序。我们的目的是使你能够在web.config文档中仅改变数据库连接字符串就能使你的应用程序维持原有的工作。

VS 2010 SP1 中适用于SQL CE新工具支持

VS 2010 SP1包含了改善很多的工具支持SQL CE,并且第一次添加了对ASP.NET项目中SQL CE使用的支持。使用VS 2010 SP1,你现在可以:

· 建立新的SQL CE数据库。

· 编辑和修改SQL CE数据库架构和索引。

· 用数据填充SQL CE数据库。

· 用 Entity Framework Designer 建立与SQL CE数据库匹配的模型层。

· 使用 EF Code First 定义程序里的模型层,然后从它们里建立一个SQL CE数据库,根据需要用VS编辑数据库。

· 用web部署(Web Deploy)将SQL CE数据库部署到远端服务器,根据需要将它们转换到完整的SQL服务器数据库。

你可以在ASP.NET Web Form 和基于ASP.NET MVC 的项目中使用上面所有的功能。

下载

透过安装 VS 2010 SP1 (beta)你可以获得VS2010中SQL CE工具支持。

装了SP1 之后,你也需要安装针对 Visual Studio 的SQL CE 工具下载。这是一个独立的下载,它使SQL CE工具支持VS2010SP1 。

Demo 两个场景

在本篇博客中我将透过一个ASP.NET 表单和一个基于ASP.NET MVC的应用程序来Demo SQL CE 和VS 2010 SP1的使用 。具体来说,我们将逐步讲解:

· 怎样使用VS 2010 SP1 建立SQL CE 数据库,然后使用Visual Studio的EF4 视觉化编辑器来建立一个模型层,然后用ASP.NET GridView控件来显示和编辑数据。

  • 怎样用 EF Code First 定义一个使用POCO类的模型层,然后使EF Code First 程序基于模型类“自动地建立”一个SQL CE 数据库。我们就看看怎样使用VS 2010 SP1对SQL CE的新支持来查阅已建立的数据库,用数据填充它,在以后改变它的架构。我们会在基于 ASP.NET MVC 的应用程序背景下做这些 .。

透过安装 VS 2010 SP1 (beta),然后安装 适用于Visual Studio下载的SQL CE 工具 (这是一个独立的下载,它能使SQL CE工具支持VS 2010 SP1)你可以在你的机器上做下面的两个步骤 。

步骤1:建立一个SQL CE数据库,建立EF模型类,用GridView修改数据

第一个步骤将会Demo在一个ASP.NET Web Form 应用程序中怎样建立和定义一个SQL CE数据库。然后我们会为它建立一个EF模型层以透过一个 控件来修改数据。

第一步:建立一个新的ASP.NET Web Form程序

在Visual Studio中从文档->新项目菜单命令开始,建立一个新的ASP.NET Web Form项目。我们将用“ASP.NET Web Application”项目模板选项,以使它应用有默认的UI界面:

clip_image001

第二步:建立一个SQL CE数据库

在建立的项目中以右键点按“App_Data”数据夹,选择“新增->新的项目”菜单命令:

clip_image002

这将会显示“新增项目”对话盒。选择“SQL Server Compact 4.0 Local Database”项目(在VS 2010 SP1中新增的)并将数据库文档命名,建立“Store.sdf”:

clip_image003

注意SQL CE数据库文档有一个.sdf文件副文件名。把他们放到ASP.NET 应用程序的/App_Data数据夹里,使它更容易部署。

当点击上面的“新增”按钮时,一个Store.sdf文档就会被添加到我们的程序中:

clip_image004

第三步: 添加一个“Products” 表格

在Server Explorer 选项卡中于“Store.sdf”数据库文件上按两下,将会打开它。由于它是一个新的数据库,所以里面没有表格:

clip_image005

在“Tables”图示上按右键,选择“Create Table” 菜单命令以建立一个新的数据表。我们将为它命名为“Products” 并为它添加4列。我们将把第一列标记为主键(并把它作为一个自动编号列以使它的值会随着每个新的行自动增加) :

clip_image006

当按了“ok”后我们的产品表格会在SQL CE数据库中被建立。

第四步:用数据填充

一旦产品表格建立了,它就会在Server Explorer中显示出来。我们可以以右键点按它,选择“Show Table Data”菜单命令,修改它里面的数据:

clip_image007

让我们对它来添加一些数据样本:

clip_image008

步骤5:建立一个 EF模型层

我们有一个里面含有数据的SQL CE数据库—现在就让我们来建立一个EF模型层来为我们提供一个简单的方法来查询并更新它里面的数据。

在项目上以右键点按,选择“新增->新的项目”菜单命令。将会弹出一个“新增项目”对话盒—选择里面的“ADO.NET Entity Data Model”选项,并将其命名为“Store.edmx”。

clip_image009

这就会在我们的解决方案资源管理器中添加一个新的Store.edmx项并启动一个允许我们快速地建立一个EF 模型的精灵 (即 Entity Data Model Wizard):

clip_image010

选择上面的“Generate From Database”选项并点按下一步。选择刚才建立的Store.sdf SQL CE数据库,然后再次点按下一步。

精灵会问你想要产生模型的是什么数据库对象。我们就选择产生之前建立的“Products” 表格:

clip_image011

当按“Finish”按钮,Visual Studio将会打开EF Designer。它上面会出现一个已有的对应到我们的SQLCE数据库中”Product”表的产品实例:

clip_image012

VS 2010 SP1 EF Designer 和SQL CE配合工作得相当好,就像它和SQL Server 和 SQL Express工作一样。上面的产品实例会被当作一个类(称为“Product”),我们能在ASP.NET应用程序中程序设计处理它。

第六步:编译项目

在使用模型层之前你需要建立一个项目。使用Ctrl+Shift+B键来编译程序,或者用Build->Build Solution菜单命令来完成。

第七步:用EF模型层建立一个页面

现在让我们来建立一个包含GridView控件的简单的ASP.NET Web Form,我们可以用它来显示和编辑我们的产品数据(透过我们刚建立的EF模型层)。

以右键点按项目,选择 [新增->新的项目]命令。选择“Web Form from Master Page”选项模板,并把你建立的页面命名为“Products.aspx”。把主页建立在项目的根部的“Site.Master”模板上。

添加一个顶端有

Products

的新页面,同时在它里面添加一个 控件:

clip_image013

然后点击“Design” 选项,转到设计检视。选择GridView空间,然后点击右上角来显示GridView的“智慧标签”UI:

clip_image014

选择上面圈出部分的“New data source…”下拉选项。这会产生下面的让你选择你的数据来源类型的对话盒:

clip_image015

选择“Entity”数据来源选项–它会使我们很容易地从我们的GridView连接到我们早先建立的EF模型层。这会产生另一个对话盒:

clip_image016

在下拉选项中选择“StoreEntities”–这是我们之前建立的EF模型层。然后点按下一步–这会让我们选择我们想要系结到的实例:

clip_image017

在上面的对话盒中选择“Products”实例–这表明我们我们想要系结到我们之前定义的“Product”实例类。然后点击“Enable automatic updates”核取方块以确保我们可以查询和更新Products。当点按“Finish”,VS会显示一个 控件:

clip_image018

我们将要做的最后两步是在表格中点按“Enable Editing”核取方块(这将会使 GridView 在每行显示出“Edit”连接),并且(有选择性地)使用Auto Format 对话盒来为 GridView 选择一个UI模板。

第八步:执行程序

现在就让我们来执行下我们的程序,并浏览包含有GridView的/Products.aspx页面。这样做了之后,我们将会在SQL CE数据库中看到Products的一个表格 UI。点按每行的“Edit”连结会使我们看到它们的值:

clip_image019

当点按了“Update”之后,GridView就会返回它们的值,透过EF模型层使它们存留着,最终在SQL CE数据库中保存。

了解更多关于ASP.NET Web Forms中的EF使用

请在http://asp.net网站上阅读这个课程系列了解更多关于怎样用ASP.NET Web Forms使用EF 。

教程中将SQL Express用作数据库–但欣慰的事情是所有相同的步骤/概念现在都可以用SQL CE完成。

Demo2: 透过SQL CEASP.NET MVC 3使用EF程序优先

上面的案例我们使用了数据库优先 (Database First) 的方法–此处我们先建立了数据库,然后用EF设计器从数据库中建立模型类。

除了支持基于设计器开发的数据流,EF也支持更多以程序为中心的选择,我们称之为 “程序优先开发 (Code First)”。程序优先开发形成了一个相当令人喜爱的开发工作流程。它使你可以:

· 透过需简单地编写“普通旧类”(注:即 POCO 类) 来定义你的模型对象,而不需要基底类或视觉化的设计器。

· 使用“习惯优于组态”方法,从而不用明确地设定任何东西就能使数据库保持一致性。

· 根据需要覆盖基于约定的保存,使用一个流畅的程序API来完全地客制保存镜像。

· 基于你定义的模型类根据需要自动建立数据库–允许你先从程序开始

过去我已经发表了几篇关于EF程序优先的文章–我真的觉得它很棒。好消息是它也可以和SQL CE一起很好地使用。

SQL CE, EF 程序优先和支持SQL CE的新VS 工具支持的组合形成了一个相当不错的工作流程。下面是一个简单的例子,告诉你怎样使用它们建立一个简单的ASP.NET MVC 3项目。

第一步:建立一个新的ASP.NET MVC 3项目

我们将从Visual Studio中的文档->新项目菜单命令开始建立一个新的ASP.NET MVC 3项目。我们将使用“Internet Project”模板以使它有一个默认的界面实践:

clip_image020

第二步:用NuGet安装EFCodeFirst

接下来我们要用NuGet套件管理器(ASP.NET MVC 3自动安装的)来把EFCodeFirst程序库添加到项目中。我们将用套件管理器命令窗口来做这个。在Visual Studio中透过选择查看->其他窗口->套件管理控制面板 菜单命令打开套件管理器控制面板。然后在套件管理器控制面板中输入:

install-package EFCodeFirst

来下载EFCodeFirst程序库,把它添加到项目:

clip_image021

当我们输入了上面的命令,EFCodeFirst程序库就会被下载下来并添加到我们的应用程序中:

clip_image022

第三步:建立一些模型类

使用一个基于“程序优先”的开发工作流,我们会先建立模型类(甚至在我们建立数据库之前)。我们用写程序的方法来建立这些模型类。

对于这个案例,我们将在工程的“Models”数据夹上以右键点按,向我们的工程添加下面的3个类:

clip_image023

上面的“Dinner” 和 “RSVP”模型类是“普通旧 CLR 对像” (又称为 POCO)。它们不需要由任何基底类导出或实践任何界面,并且它们的属性都是标准的.NET数据类型。 它们上面没有添加数据保存属性或数据程序。

“NerdDinners”类继承自DbContext(由EFCodeFirst提供),它处理从数据库中恢复/保存Dinner 和RSVP执行个体。

第四步:Dinner列表

我们已经为这个项目写了对完成模型层所需要的所有程序。

现在让我们公开执行项目中的URL: /Dinners/Upcoming我们将用它来罗列未来将要发生的Dinner。

我们将透过在“Controllers”数据夹上以右键点按,选择“新增->控件”菜单命令来实现它。我们将指出我们想要的控制器来建立“DinnersController”。然后我们会在它里面实现一个“即将实现的”行为方法,它使用上面的模型层列出了即将到来的Dinner。我们将用一个LINQ查询来恢复数据,把它传递给一个 View,程序如下:

clip_image024

然后在方法上以右键点按,选择“新增-检视”菜单命令来建立一个展示了Dinner的“将要实现的”检视模型。

我们将在“新增检视”对话框中使用“empty”模型选项,并用Razor写出下面的检视模板:

clip_image025

第四步:侦错我们的项目以使用SQL CE数据库

我们已经完成了所有程序的编写–下一步将会是编译一个将要使用的数据库连接字符串。

透过把下面的 添加到项目的顶部的web.config文档,我们将向SQL CE指出我们的NerdDinners模型类:

clip_image026

EF程序优先使用一个默认的约定,在这协议里内容类 (Context class) 会寻找一个与DbContext类名字匹配的连接字符串。由于之前我们建立了一个“NerdDinners”类,我们也把连接字符串命名为“NerdDinners”。 上面我们侦错连接字符串以将SQL CE 用作数据库,并且告知它我们的数据库文档将会存在于ASP.NET工程的App_Data目录中。

第五步:执行程序

既然我们已经建立了应用程序,那就来执行它吧!

我们将浏览/Dinners/Upcoming URL–这样做会显示一个空的列单:

clip_image027

你也许会问—列表从哪里查询来的?我们并没有明确地建立一个数据库?!?

EF程序优先支持的很酷的功能之一是在我们指出的数据库并不存在时自动地建立数据库的能力(取决于模型类的框架)。上面我们侦错了EF程序最佳化使之在项目的App_Data目录下指向一个SQL CE数据库。当我们执行程序时,EF程序优先发现SQL CE数据库并不存在并自动地为我们建立一个。

第六步:使用VS2010 SP1来探究新建立的SQL CE数据库

在解决方案资源管理器中点击“显示所有文档”,你会看到“NerdDinners.sdf” SQL CE数据库文档,它是由App_Data数据夹里的EF程序优先为我们自动建立的:

clip_image028

我们可以选择在文档上以右键点按,选 "Include in Project" 把它添加到我们的解决方案中:

clip_image029

我们也可以在文件上按两下(不管它是否添加到了项目),VS 2010 SP1会把它作为一个我们可以在IDE的“服务资源管理器”内编辑的数据库来打开。当我们透过执行上面的应用程序进入了NerdDinners 类,它就会被EF程序优先执行:

clip_image030

我们可以在表格上以右键点按,使用“Show Table Data”命令来往数据库中输入一些即将发生的Dinner:

clip_image031

我们将使用VS 2010 SP1支持的内建编辑器来填充下面的表格数据:

clip_image032

现在当我们在浏览器里的/Dinners/Upcoming URL上点击“refresh” ,我们就会看到一些将要有的Dinner显示出来:

clip_image033

第七步:更改我们的模型和数据库架构

现在让我们来修改模型层和数据库的架构,并Demo一种使得这种做法更简单的新的针对SQLCE的VS 2010 SP1工具支持方法。

使用EF程序优先你可以从修改一个模型类来开始改变数据库。例如,我们添加一个附加的字符串属性“UrlLink”到我们的“Dinner”类。我们可以使用这个指向更多关于时间的连结:

clip_image034

现在当我们再次执行程序,并访问/Dinners/Upcoming URL我们将会看到抛出一个例外:

clip_image035

我们能看到这个错误是因为EF程序优先自动地建立数据库,且在默认情况下建立数据库后会添加一个表格,它帮忙追踪数据库架构是否和我们的模型类同步。当它们不同步时,EF程序优先会抛出一个错误—这使得在开发时期发现问题变得更容易,然而也许你只在执行时才会发现(透过含糊的错误)。注意如果你不想要这个功能,你可以透过改变DbContext类(在NerdDinners类中)默认的约定使它不再追踪schema version的方式,把它关掉。

在上面的例子中我们的模型类和数据库架构是不同步的—我们怎么才能修复呢?现在你可以使用两种方法:

· 删掉数据库,使EF程序优先在一个新的模型类框架(在现有的DB中遗失了数据)的基础上自动地重建数据库

· 修改已有的数据库使它和模型类保持同步(保持/移植DB中现有的数据)

有两种方法可以用来做上面的第二种方法。下面我将Demo怎样利用新的针对SQL CE的VS 2010 SP1工具支持来使用数据库架构工具修改我们的数据库结构。将来我们也打算用EF支持“迁移”功能,它将会允许你在程序上自动地/手写数据库架构迁移。

第八步:使用VS 2010 SP1修改我们的SQL CE数据库架构

VS 2010 SP1中的新的SQL CE工具支持使得修改我们已有的SQL CE数据库架构变得更容易。要做到这些,我们可以透过以右键点按“Dinners”表格,选择“编辑表格架构”命令:

clip_image036

这将会产生下面的“编辑表格”对话框。我们可以重新命名,修改或删除表格中任意一个已有的列,或在列的列标底部点按,手动添加一个新列。下面我已经添加了一个“nvarchar”类型(由于我们的属性是一个字符串)的“UrlLink”新数据栏:

clip_image037

当点击了“ok”之后,数据库会自动更新产生一个新的字段,现在我们的架构就和模型类相匹配了。

由于我们是手动地修改数据库架构的,所以我们要有一个附加的步骤来让EF程序优先知道数据库架构和模型类是同步的。正如我很早之前提过的,当EF程序优先自动地建立一个数据库时,同时也添加了一个“EdmMetadata”表格到数据库来追踪架构版本(把模型类弄乱来阻止它们发现模型类和数据库架构的不匹配):

clip_image038

由于我们是手动地更新和维护我们的数据库架构,我们不需要这个表格—所以可以删掉它:

clip_image039

这样我们仅剩下了下两个和模型类对应的表格:

clip_image040

现在当我们再次执行/Dinners/Upcoming URL,它将会正确地展示Dinner列表:

clip_image041

我们最后要做的一个修改将是更新 View 来检查新的UrlLink属性,如果一个事件有UrlLink属性的话为它提供一个连结:

clip_image042

现在当我们更新/Dinners/Upcoming时,我们将会看到数据库中保存UrlLink的事件有超链接:

clip_image043

总结:

SQL CE提供了一个免费的,嵌入式的数据库引擎,易于你使用数据库保存。有了SQL CE4,你可以在ASP.NET项目和应用程序(Web Forms 和 MVC)中使用它。

VS 2010 SP1提供的工具支持使你可以简单地建立,编辑和修改SQL CE数据库—也可以使用标准的EF设计器。这使你在利用嵌入式的数据库选项的同时重温你已掌握的技术和数据知识。这对小的应用程序(你不需要完全的SQL Server的可扩充性)和开发测试案例—你想不用全局的数据库案例快速地开发/测试你的应用程序有很大的帮助。

SQL CE使得后期迁移你的数据到一个完整的SQL Server或SQLAzure执行个体变得容易——如果你想的话——不用改变应用程序中的任何程序。在上面的两个场景中我们需要改变的只是web.config文档中的 值,以使程序在SQL Server上执行。这为从小的嵌入式数据库解决方案基础上扩展的应用程序提供了很大的灵活性。

希望这些对您有所帮助。

Scott

附:除了发表博客,我现在也使用Twitter来快速更新并分享连结。请关注我twitter.com/scottgu

free counters

原文:大专栏  VS 2010 SP1 和 SQL CE


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11496778.html