在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组合键),连接到内部数据库

image

然后右击Data Connections,选择“Add Connection…”来添加一个新的连接

image

我们需要连接到磁盘上特定的数据库文件,而不是附加的数据库。在开发过程中LightSwitch创建了一个所谓User Instance的数据库,当访问时它可以动态附加到SQL Express 服务上。这样,将LightSwitch开发解决方案和示例从一台机器上拷贝到另一台机器上就有了可能,而且不会丢失任何关键的数据信息。

所以当" Add Connection "对话框出现时,单击" Change…”按钮。

image

然后将data source更改为”Microsoft SQL Server Database File”并单击OK按钮

image

现在,你需要指定数据库文件的位置。数据库文件总是被命名为 ApplicationDatabase,它位于解决方案的\bin\Data文件夹下。选择ApplicationDatabase.mdf 文件,然后单击OK按钮。

image

选择Use Windows Authentication这一选项,然后点击Test Connection按钮。如果连接成功了,点击OK(如果没有的话,请确保你安装Visual Studio的身份与登陆机器的身份一致)

image

现在你可以看到基于数据设计器中的模型,LightSwitch为你创建的所有内部的表了。

image

Server Explorer允许你不仅向表中储存的数据也向它的结构(模式)做任何数量的变更。在这儿请注意。 你对数据库结构直接做的任何变更都不会自动在你的数据模型中反映出来,而且你可以取消它。数据设计器可以确保你对模型所做的变更同步保存在数据库中,但是如果你在数据设计器之外修改数据库,什么事情都有可能发生。警告过你了 !:-)

设置图表支持

另外你也可以在Server Explorer中做些其他很棒的事情,比如输入更多数据记录以及创建数据库图表。展开“Database Diagrams“节点以创建数据库图表,你将看到下面的对话框:

image

点击Yes按钮,将显示另一个对话框将:

image

再次点击Yes。如果信息与你设置的不符。不过,很多时候并没有那么简单。通常会出现类似于以下的错误信息:

image

为了获得图表工作的支持,该数据库的所有者必须是本地登录并且是一个有效的 db_owner,而不是像我上面的域登陆。所以为了解决这一问题,我们需要将数据库所有者更改为一名本地帐户。当 Visual Studio 安装 SQL Express 时,是以NETWORK SERVICE登陆的。你可以转换到Services查看它(启动Windows,搜索“Services”),然后查看SQLEXPRESS服务项目。

image

所以如果我们将数据库拥有者改为此次登陆的用户,图表就可以运行了。虽然你可以在SQL Server Management Studio里做这些,但它没有安装在Visual Studio上。所以我将继续为你们展示在没有安装任何东西的条件下如何实现此操作。首先退回到内部数据库所在的bin\Data文件夹,然后做一份拷贝(只是为了以防万一)。

然后给这个文件夹授予NETWORK SERVICE权限,允许Full Control(右击\Data文件夹,选择properties,在 security标签下,点击Add按钮,输入NETWORK SERVICE,点击OK,然后取消选中Full Control)。

image

现在我们需要创建一小段 SQL 脚本,将数据库加到SQL Express service里。 更改数据库的所有者,然后再次分离。打开记事本,将以下内容粘贴到一个新的文本文件中,修改你的数据库文件的路径。

  1: USE master
  2: GO
  3: -- Change the path to your database files! 
  4: -- Make sure the login that runs your SQLEXPRESS service (i.e. NETWORK 
  6:CREATE DATABASE ApplicationData ON
  5: SERVICE) has file access to this folder
  7: ( FILENAME = 
  8: N'C:\...\Projects\MyApplication\MyApplication\bin\Data\ApplicationDatabase.mdf' 
  9: ),
  10: ( FILENAME = 
  11: N'C:\...\Projects\MyApplication\MyApplication\bin\Data\ApplicationDatabase_log.ldf' 
  12: )
  13: FOR ATTACH
  14: GO
  15: ALTER AUTHORIZATION ON DATABASE::ApplicationData TO [NT AUTHORITY\SYSTEM]
  16: GO
  17: USE master
  18: GO
  19: EXEC master.dbo.sp_detach_db @dbname = N'ApplicationData'
  20: GO

以SQL作为扩展名,将该文件保存为C:\Temp\ChangeOwner.sql,下一步打开管理员命令提示符。

clip_image024

首先关闭 Visual Studio以关闭所有与数据库文件相关的连接。然后键入以下操作,执行该脚本:

sqlcmd -S .\SQLEXPRESS –i "C:\Temp\ChangeOwner.sql"

创建图表

这些做完之后,重新打开Visual Studio,你在Server Explorer仍然可以看到ApplicationDatabase。展开database节点,右击Database Diagrams文件夹,然后选择“Add New Diagram”。现在所有事情都应该正常运作了。

image

当你添加一个新的图表时,它会询问你想要包括哪些表。在LightSwitch数据库中,所有以“aspnet_”开头的表以及“RolePermissions”表是系统内部的表,并且它们是与authentication 和authorization系统相关连的。它们不能被修改,所以你可以在图表中删除它们。

image

点击Add按钮,将会生成一个基于你所选择的表的关系图表

image

想要保存这个图表,你只需点击标签上的“X”来关闭窗口,系统会提示你将图表保存到数据库中。

切记

在LightSwitch内部数据库上使用Server Explorer对于输入数据或者生成图表发挥着很大的作用。但是任何时候如果你想修改表的实际结构,你必须在数据设计器里操作,否则会存在你的模型不同步的风险。

我希望这篇博客不仅仅可以帮助到LightSwitch用户,也可以帮到其他Visual Studio用户来获得图表支持。

希望大家喜欢!