【问题标题】:The ConnectionString property has not been initialized on update-databaseConnectionString 属性尚未在更新数据库上初始化
【发布时间】:2014-05-16 22:21:26
【问题描述】:

在包管理器控制台中,我在 azure 上针对我的数据库运行命令更新数据库,但我收到错误消息,提示 ConnectionString 属性尚未初始化。

我对本地数据库做了同样的事情,一切都很顺利。在我的网络配置中,我将连接字符串更改为我的天蓝色数据库,这是我的数据库上下文的样子:

 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"

为什么会出现这个错误?

【问题讨论】:

  • 你找到原因了吗?
  • 不,我没有,我刚刚创建了一个新项目,并以同样的方式再次完成了整个工作,它成功了,也许我有一些愚蠢的错误,或者某个地方的错字
  • 是 ASP Identity 2.0.0 造成的。我敢打赌,在您的新项目中,您现在正在运行 1.0.0。检查我的解决方案答案(实际上需要 5 秒才能修复,但我花了几个小时才找到它,当然,它一直就在我的眼皮底下!)stackoverflow.com/a/23130143/2790000

标签: c# asp.net-mvc azure asp.net-web-api


【解决方案1】:

我想我已经回答了这个问题here.

我猜你有 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,它应该可以工作。

【讨论】:

  • 哇。你帮我省了几个小时的深夜咒骂和哭泣。我不会想到在一百万年后尝试这样做。谢谢。
  • @GaryMcGill 在这个问题上,我真的把头撞在桌子上好几个小时——我也找不到任何有关此更改的文档。很高兴它对您有所帮助。
  • 难以置信。我真的是在拔掉我还有的头发。谢谢!
  • 老兄,这应该是一个粘性帖子,就像在旧论坛时代一样。你们是如何知道这些“技巧”的,我无法理解,但很高兴你知道!
【解决方案2】:

public MadLabsDatabaseContext() : base("DefaultConnection") 似乎没有找到正确的连接字符串。我将逐步执行该代码以确保使用您期望的连接字符串创建上下文。

这可能有助于解释它How to fix "The ConnectionString property has not been initialized"

所以使用ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString 而不是"DefaultConnection"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多