我的应用程序在连接到我们的MS SQL数据库服务器时似乎忽略了数据库连接字符串,而且我在ASP.Net或IIS中没有经验,所以我不确定错误是什么或在哪里。< / p>
对于后台,我在.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.]
我用Google搜索了异常并尝试了添加的解决方案:
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" />
我现在有点超出我的深度,因为它以前工作过,似乎可以在我的本地机器上工作。我到处搜索过,但大多数答案都涉及使用集成安全性,我绝对不会这样做。任何帮助将不胜感激。
与数据库连接的代码是(db上下文的开头,此后它相当大,只创建每个字段):
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();
连接几次,但使用与上面相同的逻辑。
答案 0 :(得分:0)
我已经成功解决了这个问题,虽然它并不是真正的解决方案。我认为它可能与将应用程序回滚到.Net 4而不是其他任何东西有关,因为它在后来的服务器上工作,我不得不糊涂。
结果我再次启动了一个新的MVC项目,并且看到Visual Studio不再支持MVC5和.Net 4.5.1之前的任何内容,我不得不再次回滚它,但是在一个空项目中执行它太容易了。在复制时我也清理了一下这个项目,所以这可能有所帮助。
我设法让它在星期五晚上工作,至少到它加载时没有抛出错误。希望我们能够在某些时候将服务器更新到至少Windows Server 2008,并且能够运行.Net 4.5.1。