1

我整理了一个使用 Entity Framework 4.1 的简​​单 ASP.NET MVC 3 测试 Web 应用程序。我的 DBContext 看起来像这样:

public class EFDbContext : DbContext
{
    public DbSet<TestParent> TestParents { get; set; }
    public DbSet<TestChild> TestChildren { get; set; }
}

所以我期待 EF 会寻找一个名为 EFDbContext 的连接字符串。这是 web.config 在我的本地环境中包含的内容:

<connectionStrings>
  <add name="EFDbContext"
     connectionString="data source=.\SQLEXPRESS;Initial Catalog=testDB;Integrated Security=SSPI;MultipleActiveResultSets=True"
     providerName="System.Data.SqlClient" />
</connectionStrings>

我没有在连接字符串中提供用户名和密码。所以据我了解,EF 将使用 Windows 身份验证进行数据库连接。在我的本地环境中,一切都按预期工作。

现在 - 当我将这个 Web 应用程序发布到我的 Web 托管服务器的服务器时,我必须切换到 SQL Server 身份验证(Web 托管的限制 - 足够公平)。所以我调整了我的连接字符串,如下所示:

<connectionStrings>
  <remove name="LocalSqlServer" />
  <add name="EFDbContext"
       connectionString="Data Source = localhost\SQLEXPRESS; Initial Catalog = testDB; User Id = dbUser; Password = dbPassword; Integrated Security = SSPI; MultipleActiveResultSets = True; Persist Security Info=True"
       providerName="System.Data.SqlClient" />
</connectionStrings>

这是我有意识地做出的唯一改变。不幸的是,这不再起作用了。显示的错误消息表明尝试使用 Windows 身份验证而不是 SQL Server 身份验证来连接数据库(错误消息是德语,但它列出了主机商已确认是他们创建的 Windows 用户之一的用户)。

错误消息还包含我在连接字符串的初始目录部分中指定的数据库名称。在我看来,这清楚地表明名为 EFDbContext 的连接字符串确实被 EF 读取和使用。

我的问题是我什至找不到更接近问题的起点。整个事情对我来说就像一个黑匣子。EF 是否尝试 SQL Server 身份验证,然后切换到 Windows 身份验证作为后备?或者我是否需要更改某些配置文件中的设置以强制 EF 进行 SQL Server 身份验证?

我想不出任何明智的方法来进一步扩展我的应用程序。我的谷歌搜索并没有让我到任何地方,而且多次将我的头撞在墙上也没有提供解决方案。所以任何帮助将不胜感激。

4

1 回答 1

3

为什么要在连接字符串中保留“Integrated Security = SSPI;”?有关连接字符串的更多信息,请参见此处。

于 2012-05-10T11:03:16.423 回答