4

我正在努力寻找最简单的方法来创建一个基本的“模型优先”实体框架示例。但是,我正在努力处理数据库的实际生成,特别是针对数据库运行 SQL。

工具

  • 视觉工作室 2010
  • SQL Server 2008 速成版

过程

  1. 创建一个新的类项目
  2. 将名为“Database1.mdf”的新服务器数据库项 (mdf) 添加到项目中
  3. 添加一个空的 ADO.net 实体模型
  4. 创建一个简单的实体(Person:Id,Name)
  5. 生成脚本,选择 Visual Studio 为我创建的 Database1 连接
  6. 右键单击脚本编辑器并选择“执行 SQL...”选项
  7. 登录到 SQLEXPRESS

这就是说它找不到数据库名称“Database1”的地方。

“问题”是 SQL 服务器没有附加 Database1。我 100% 肯定 Visual Studio 在创建新数据库时用于将数据库附加到 SQLExpress(步骤 2)。这似乎不再是这种情况(甚至 VS2010 的测试版也做到了)。有人可以证实这一点吗?或者告诉我如何让这发生?

有没有办法可以修改 TSQL 脚本以使用未附加的数据库。即一个文件。

我知道我可以使用 SQL Management Studio 或 sqlcmd 来附加数据库,但我最好避免使用这些解决方案,因为我希望看到只使用 Visual Studio 的最干净的方法。

理想的解决方案(按最喜欢的顺序)

  1. 获取 Visual Studio 以附加新创建的数据库
  2. 修改生成的SQL指向文件

提前致谢。

4

4 回答 4

2

我发现始终有效的方法(至少对于 VS 2010 和 SQL Server (2008|2008 R2) Express)是:

  1. 创建 ADO.NET 实体模型
  2. 创建 .mdf 数据库,但不要向其中添加任何表
  3. 从服务器资源管理器中复制连接字符串 -> 修改连接 -> 高级(底行)
  4. 在服务器资源管理器中关闭连接
  5. 通过“Generate Database from Model”生成SQL脚本
  6. 在编辑器中打开 SQL 脚本后,单击“连接”,然后转到选项 -> 附加连接参数,并将连接字符串粘贴到此处。我还在;Database=DATABASENAME;连接字符串的末尾添加了“”。
  7. 执行 SQL
  8. 断开连接并重新启动 Visual Studio
  9. 现在,在展开 .mdf 文件的树控件后,这些表应该在服务器资源管理器中可用。

可能不是所有的步骤都是必需的(尤其不是按照上面显示的确切顺序),因为我没有真正优化过这个过程——如果它有效,就不要修复它。:-) 一个关键步骤似乎是#8,即重新启动 Visual Studio,否则服务器资源管理器无法重新打开数据库。

于 2010-11-19T19:20:14.030 回答
1

感谢 HighTechRider,在服务器资源管理器中为 DataConnection 创建的连接字符串确实具有“AttachDBFilename”参数。

但这个想法让我尝试了别的东西。

按照上面列出的相同步骤,我在登录到 sqlexpress 步骤时做了一些不同的事情。这一次,在Connect to Database Engine屏幕上,我单击了显示更多选项按钮并转到“附加连接参数”选项卡。

在这里我添加了AttachDBFilename=c:\src\mydatabasehome\Database1.mdf;database=Database1;。注意我使用的是完整路径,而不是AttachDbFilename=|DataDirectory|\Database1.mdf

然后,这对数据库执行了我的 sql,没有问题。

然后我回到服务器资源管理器并扩展我的数据库连接,这样我就可以看到我的新表,但是连接失败了。经过一番折腾,我发现无论出于何种原因,当我使用“连接到数据库引擎”屏幕连接到 SQLExpress 实例时,我在 AttachDBFilename 中指定的数据库文件实际上建立了永久连接。因此,先前的连接字符串(使用 AttachDBFilename 参数)不再有效,因为该数据库已附加。

因此,我删除了该连接并直接创建了一个新连接到 SQLServer,其中有一个名为“database1”的数据库供我选择。

现在我认为一切都很好。

这是一个奇怪的过程,对我来说肯定是出乎意料的,所以如果有人想解释发生了什么,我当然会很感激。现在我有办法(即使有点奇怪)做我想做的事,更好的解决方案值得赞赏。

希望这可以帮助某人。

于 2010-05-07T04:52:45.123 回答
0

您的连接字符串是什么样的?您是否尝试AttachDbFilename在连接字符串中添加一个?

于 2010-05-06T07:39:38.347 回答
0

“附加连接参数”选项卡在哪里?我只有“高级”选项卡,不清楚您在哪里添加了附加语句。

于 2010-05-21T01:21:23.903 回答