ASP.Net MVC应用程序似乎忽略了数据库连接字符串

本文关键字:数据库连接 字符串 Net MVC 应用程序 ASP | 更新日期: 2023-09-27 18:20:34

我的应用程序在连接到我们现有的MS SQL数据库服务器时似乎忽略了数据库连接字符串,而且我在ASP.Net或IIS方面没有经验,所以我不确定错误是什么或在哪里。

作为背景,我有一个在.Net 4.5上运行的ASP.Net MVC应用程序,不幸的是,我需要将它部署在一个只运行.Net 4的旧服务器上。因此,我不得不将其回滚到.Net 4,这花了一段时间,包括更换NuGet包和删除任何报告兼容性错误的部件。

当我从VS Community 2015本地运行该应用程序时,它运行良好,连接到数据库,加载所需内容。当我将它发布到我们的测试服务器(使用IIS 7并运行.Net 4应用程序池)时,它会给出以下错误:

用户"登录失败

例外:

[InvalidOperationException: This operation requires a connection to the 'master' database. Unable to create a connection to the 'master' database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection.]

我在谷歌上搜索了这个异常,并尝试了添加以下内容的解决方案:

Database.SetInitializer<FormsContext>(null);

到application_start方法。然后给出的导致了此异常(与用户"相同的错误):

[EntityException: the underlying provider failed to open]

我不确定这是好是坏。我的连接字符串(密码和服务器被屏蔽)是:

<add name="DefaultConnection" connectionString="Data Source=<server>;Initial Catalog=forms;Integrated Security=False;Trusted_Connection=False;Persist Security Info=True;User ID=formsReadWrite;Password=<password>;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" />
<add name="FormsContext1" connectionString="Data Source=<server>;Initial Catalog=forms;Integrated Security=False;Trusted_Connection=False;Persist Security Info=True;User ID=formsReadWrite;Password=<password>;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" />

我现在有点力不从心,就像以前一样,而且似乎在我的本地机器上工作。我在谷歌上到处搜索过,但大多数答案都涉及到使用集成安全性,我绝对不会这么做。如有任何帮助,我们将不胜感激。

连接到数据库的代码是(数据库上下文的开始,在此之后它相当大,并且只创建每个字段):

public partial class FormsContext : DbContext
{
    public FormsContext()
        : base("name=FormsContext1")
    {
    }
    public virtual DbSet<form> forms { get; set; }
    public virtual DbSet<input> inputs { get; set; }
    public virtual DbSet<option> options { get; set; }
    public virtual DbSet<section> sections { get; set; }
    public virtual DbSet<user> users { get; set; }
    public virtual DbSet<reveal> reveals { get; set; }
    public virtual DbSet<survey> surveys { get; set; }

连接代码:

using (var data = new FormsContext())
        {
            //Query the database for the form details
            var detailsQuery = (from d in data.forms 
                                where d.name == name
                                select d);
            var details = new forms.form();

它连接了几次,但使用了与上面相同的逻辑。

ASP.Net MVC应用程序似乎忽略了数据库连接字符串

我已经设法解决了这个问题,尽管它并不是真正的解决方案。我认为这可能与将应用程序回滚到.Net 4有关,而不是其他任何事情,因为它在后来的服务器上运行,我不得不蒙混过关。

因此,我重新开始了一个新的MVC项目,由于Visual Studio不再支持MVC5和.Net 4.5.1之前的任何东西,我不得不再次回滚,但在一个空项目中执行它要容易得多。在复制项目时,我也对它进行了一些清理,所以这可能会有所帮助。

我设法在周五晚些时候让它工作起来,至少到了加载时没有出错的程度。希望我们能够在某个时候将服务器更新到至少WindowsServer2008,并能够运行.Net 4.5.1。