1

我在 VS 2012 中使用 EF5 创建了一个 MVC4 解决方案,现在我正试图让数据库首先创建代码。在我添加的控制器的Createdb.Database.CreateIfNotExists();方法中, 在我的机器上,我还运行了 SQL Server 2012,我希望在那里创建数据库,而不是在某些 SQL Express 引擎或其他轻量级解决方案中创建。

我尝试了几种方法来制作正确的连接字符串,但都失败了,现在我不知道它应该是什么样子。这就是它现在的样子,但是什么都没有创建,我从中得到的CreateIfNotExists只是一个错误:

  • InnerException {“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。验证实例名称是否正确,并且 SQL Server 已配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)"} System.Exception {System.Data.SqlClient.SqlException}

这是我的连接字符串的样子:

<add name="Tool.Models.Context" connectionString="Server=MSSQLSERVER;Initial Catalog=Tool.models.ToolDb.mdf;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />

编辑:

在为这个问题苦苦挣扎了将近一天之后,我通过替换localhost来解决它MSSQLSERVER(如果我查看配置管理器,这仍然是实例的名称)。不过感谢您的评论。让我思考。

4

2 回答 2

6

localhost 是本地服务器,而不是实例,您似乎正在使用默认实例(称为 mssqlserver),因此不需要指定实例名称,只需指定服务器名称,因此为什么在连接字符串中用 localhost 替换 MSSQLSERVER 有效.

您也可以在此处使用服务器的实际名称,例如 SERVER-01(或您的特定数据库服务器的实际名称),它会产生相同的效果。

但是,如果您在机器上安装了命名实例,则必须同时指定服务器名称和实例,例如 localhost\instancename 或 server-01\instancename

希望这有助于解释为什么放入 localhost 有效。

于 2013-08-19T13:59:04.373 回答
0

没错...

默认情况下,正如大多数人可能已经知道的那样,Visual Studio 2012 - ASP.NET MVC 4 模板将定义一个默认连接字符串,该连接字符串指向 Web.config 中的 (LocalDb)v11.0。对于 Visual Studio 2010 ASP.Net MVC 4 项目模板,它指向 SQLExpress...

就我而言,我更喜欢将 connectionString 指向我用于开发的特定 SQL Server 2012。

因此,假设我打开 SQL Management Studio 并在下拉列表中看到 SQLServer2012-01 名称,我希望在其中创建数据库 + 表,这就是我通常使用的名称...

connectionString="服务器=SQLServer2012-01; InitialCatalog=..."

之后您要做的一切都很简单 - 按照定义
-Enable-Migrations
-[用内容填充您的 Seed 方法 - 如果需要...]
-Add-Migration MyFirstMigration [或您想要的任何迁移名称]
-Update-Database -详细

您应该会在服务器资源管理器窗口中看到更新的结果。

希望能帮助到你

于 2014-03-13T16:42:17.090 回答