EF5 Code First的SQL Server 2012连接字符串

时间:2013-08-19 12:32:55

标签: sql-server entity-framework

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

我已经尝试了几种方法来建立正确的连接字符串,但都失败了,现在我不知道它应该如何看待。这就是它现在看起来的样子,但没有任何东西被创建,而我从CreateIfNotExists得到的只是一个错误:

  • InnerException {“与SQL Server建立连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确以及SQL Server是否配置为允许远程connections。(provider:Named Pipes Provider,error: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来解决它(如果我查看配置管理器,它仍然是实例的名称)。谢谢你的评论。让我思考。

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

那是对的...

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

在我的情况下,我更喜欢将connectionString指向我用于开发的特定SQL Server 2012。

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

connectionString =“Server = SQLServer2012-01; InitialCatalog = ...”

之后您所要做的就是直截了当 - 按照定义中的步骤进行操作 -Enable的迁移
- [填写您的种子方法的内容 - 如果需要......]
-Add-Migration MyFirstMigration [或您想要的任何迁移名称]
-Update-Database -Verbose

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

希望有所帮助