在update-database中,ConnectionString属性尚未初始化。

3
在包管理器控制台中,我运行了针对我的Azure数据库的“update-database”命令,但是出现了错误,指出未初始化ConnectionString属性。
我在本地数据库上执行了相同的操作,一切顺利。在我的Web配置文件中,我已更改连接字符串以匹配我的Azure数据库,以下是我的Database Context的样子:
 public class MadLabsDatabaseContext : IdentityDbContext<User>
{
    public MadLabsDatabaseContext()
        : base("DefaultConnection")
    {
        Configuration.LazyLoadingEnabled = true;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUser>()
           .ToTable("AspNetUsers");
        modelBuilder.Entity<User>()
            .ToTable("AspNetUsers");
    }
}

这里是web.config文件中的连接字符串:

<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=tcp:serverName.database.windows.net,1433;Database=madLabs_db;User ID=username;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

以下是我的包管理器控制台代码:

Update-database -ConnectionString "Data Source=tcp:serverName.database.windows.net,1433;Database=madLabs_db;User ID=userName;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=True;" -ConnectionProviderName "System.Data.SqlClient"

为什么会出现这个错误?

你找到这个问题的原因了吗? - Alex
不,我没有这样做,我只是创建了一个新项目,然后按照同样的方式重新完成了整个过程,这次成功了,可能之前有一些愚蠢的错误或者拼写错误。 - hyperN
是 ASP Identity 2.0.0 导致了这个问题。我打赌在你的新项目中现在正在运行 1.0.0 版本。检查我的答案以获取解决方案(修复只需要5秒钟,但是我花了数小时才找到它,当然,在整个过程中它就在我的鼻子底下!)https://dev59.com/G37aa4cB1Zd3GeqPpWFz#23130143 - Alex
2个回答

15
我认为我已经在这里回答了这个问题 我猜你使用的是ASP Identity 2.0.0,因为某些原因,这会在Azure上引起问题,但在本地不会出现问题,不过解决方法很简单。 尝试将您的代码更改为:
public class MadLabsDatabaseContext : IdentityDbContext<User>
{
    // This is the offending line
    // Add throwIfV1Schema: false
    public MadLabsDatabaseContext() : base("DefaultConnection", throwIfV1Schema: false)
    {
        Configuration.LazyLoadingEnabled = true;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUser>()
           .ToTable("AspNetUsers");
        modelBuilder.Entity<User>()
           .ToTable("AspNetUsers");
    }
}

现在尝试发布到Azure,它应该可以正常工作。


2
哇,你刚刚为我节省了数小时的深夜诅咒和哭泣。我一百万年也想不到要尝试那个。谢谢你。 - Gary McGill
@GaryMcGill 我为这个问题在桌子上撞了几个小时,我也找不到任何关于这个变化的文档。很高兴它对你有帮助。 - Alex
难以置信。我真的在拔掉我还剩下的头发。谢谢! - Trevor de Koekkoek
兄弟,这应该像旧论坛一样成为一个置顶帖子。你们这些人是怎么知道这些“技巧”的,我真的不明白,但很高兴你们知道! - mcy

1
似乎public MadLabsDatabaseContext() : base("DefaultConnection")没有找到正确的连接字符串。我建议逐步执行该代码,确保上下文是使用您期望的连接字符串创建的。
这可能有所帮助 如何修复“ConnectionString属性未初始化”错误 因此,请改用ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString而不是"DefaultConnection"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接