当我尝试在 VS2010 中针对远程数据库本地调试我的 MVC4/EF 5 应用程序时,会发生以下情况。
错误来源(InitializeSimpleMembershipAttribute.cs):
using (var context = new UsersContext())
{
if (!context.Database.Exists()) // <-- Exception here!
{
// Create the SimpleMembership database without Entity Framework migration schema
堆栈跟踪(仅第一行):
[SqlException (0x80131904): Login failed for user 'mydb'.]
调试后我发现使用了以下连接字符串:
"Data Source=localhost;Initial Catalog=mydb;Persist Security Info=True;User ID=mydb;Password=mydb;Application Name=EntityFrameworkMUE"
这是 Web.Config 中真正的连接字符串:
<add name="DefaultConnection" connectionString="Data Source=hostname.com;Initial Catalog=mydb;User ID=mydb;Password=mydb;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
AccountModels.cs 中的代码片段:
public class UsersContext : DbContext
{
public UsersContext() : base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
很明显应该使用 DefaultConnection ,但在此过程中对其进行了修改......
当我将站点发布到同时托管 sql 服务器的远程服务器时,一切正常。
其他帖子中提到的解决方案对我不起作用,例如将 Web.Config 中的连接命名为我的 DbContext 类的名称。
编辑 - 我做了更多的实验......
这不起作用:
public class UsersContext : DbContext
{
public UsersContext() : base(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
但这确实:
public class UsersContext : DbContext
{
public UsersContext()
: base("Data Source=hostname.com;Initial Catalog=mydb;User ID=mydb;Password=mydb;MultipleActiveResultSets=True")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
}
在本地调试时,我感觉我的 Web.Config 没有被使用/识别。
仍然需要帮助:-P