代码优先连接字符串问题

Code first connection string issues

我正在构建一个 C# MVC 代码优先网站,并已使用 FTP 将其部署到主机 (aspnix.com)。初始启动页面加载,但如果我尝试加载任何需要访问数据库的页面,我只会收到错误消息:"Error. An error occurred while processing your request."

我在本地构建数据库时为数据库播种,并将 mdf 文件复制到服务器上的 App_Data 文件。如果可以避免,我宁愿不必重新播种,因为种子数据涉及对几个 api 以及其他一些网络 scraping 的多次 ajax 调用。

这里是我在本地使用的connectionString:

    <add name="(contextClass)Context" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=|DataDirectory|\(projectName).Context.(contextClass).mdf;Integrated Security=SSPI;Database=(projectName).Context.(contextClass);AttachDBFilename=|DataDirectory|\(projectName).Context.(contextClass).mdf" providerName="System.Data.SqlClient" />

我尝试以多种方式对此进行更改,包括使用 http://www.connectionstrings.com/sql-server/ 以及此处的建议,但我只是收到错误消息。我认为这无关紧要,但我使用 SQL 服务器访问数据库,而不是 Express。有什么建议吗?

编辑:
我将 post 一些我尝试过的部署连接字符串,以防有帮助:

    <add name="(contextClass)Context" connectionString="Data Source=.\SQLExpress;Initial Catalog=|DataDirectory|\(projectName).Context.(contextClass)Context.mdf;Integrated Security=SSPI;Database=(projectName).Context.(contextClass)Context;AttachDBFilename=|DataDirectory|\(projectName).Context.(contextClass)Context.mdf" providerName="System.Data.SqlClient" />

另一个无效的例子:

    <add name="(contextClass)Context" connectionString="Data Source=.\SQLExpress;Database=(projectName).Context.(contextClass)Context;AttachDBFilename=|DataDirectory|\(projectName).Context.(contextClass)Context.mdf;Trusted_Connection=Yes" providerName="System.Data.SqlClient" />

编辑: 我注意到服务器上的 web.config 文件生成了以下附加连接字符串。

    <add name="(projectName).Context.(contextClass)Context" connectionString="(projectName).Context.(contextClass)Context_ConnectionString" 
     providerName="System.Data.SqlClient"/>

这会导致任何问题吗?

更新: 名称太长(例如 (projectName).Context.(contextClass)Context)对我来说似乎很奇怪,所以我将它们更改为只是 (contextClass)Context,重建结束重新发布。我注意到在本地它仍然 运行 完美并且我仍然能够使用 SQL 服务器访问 localDB。

在服务器上,我仍然收到错误,但已更改。我现在得到:

    Exception: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

我不确定这是好是坏...

localdb 不适用于部署。

将您的连接字符串更改为真实的 sql server/express 字符串

codefirst 应该会自动构建您的数据库,但请确保您有足够的权限。

EF 支持一些初始化选项。其中之一是创建数据库。您可能应该选择该选项,但不应该使用 LocalDb。正如@Pinch 所说,这不是用于生产。您需要做的另一件事是与您的提供商核实 SQL 服务器的安装位置,并将其用作连接字符串中的数据源。看看这篇关于 EntityFramework 初始化器教程 http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

的文章