Azure,工作连接字符串,但说尚未初始化

时间:2014-07-06 10:34:45

标签: c# entity-framework azure

使用azure,有一个连接字符串。当Web应用程序遇到需要命中数据库的第一个调用时,我会收到此异常。

An exception of type 'System.InvalidOperationException' occurred in System.Data.dll but was not handled in user code

Additional information: The ConnectionString property has not been initialized.

堆栈跟踪是

   at System.Data.SqlClient.SqlConnection.PermissionDemand()
   at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext`1.IsIdentityV1Schema(DbContext db)

Fortunatley是我的构造函数:

public SisyphusContext(string connectionString)
            : base(connectionString)
        {
        }

并且其中的连接字符串有效。我接过它,打开一个控制台应用程序打开一个连接选择了一个数据加载。有趣的是,Web应用程序启动成功时,可能会使用这个连接字符串播种数据库。 (我们知道它不能......)

所以我的问题:发生了什么?我如何解决它? 我发现的一切都暗示字符串是错误的,但我已经证明情况并非如此。我怀疑它从某个地方开始连接字符串,但我无法找到它(在配置或发布文件中)

虽然说种子使用UserManager和RoleManager,但是这使用了我的DbContext。那就是说我使用构造函数来传递我的上下文来构建它 - 所以这可能没用。

更新:

这是作为部署的一部分的连接字符串:在Web项目的obj\Release\Package\PackageTmp中找到。

  <connectionStrings>
    <add name="DefaultConnection"
         connectionString="$(ReplacableToken_DefaultConnection-Web.config Connection String_0)"
         providerName="System.Data.SqlClient" />
    <add name="Sisyphus.Core.Repository.SisyphusContext" connectionString="$(ReplacableToken_Sisyphus.Core.Repository.SisyphusContext-Web.config Connection String_0)"
         providerName="System.Data.SqlClient"/>
    <add name="Sisyphus.Core.Repository.SisyphusContext_DatabasePublish"
         connectionString="$(ReplacableToken_Sisyphus.Core.Repository.SisyphusContext_DatabasePublish-Web.config Connection String_0)" providerName="System.Data.SqlClient"/>
  </connectionStrings>

事情是连接字符串工作。只是不在天蓝色。

1 个答案:

答案 0 :(得分:3)

是Azure网站还是网络服务?

对于网站,Azure在其自身配置中具有连接字符串(门户网站内的配置页面)。检查是否设置了连接字符串。

Azure portal configuration page with Connection Strings

这里有2个选项:保持Azure配置中的连接字符串:确保它是正确的。或者完全从Azure中删除连接字符串并使用web.config设置。如果您使用web.config,请确保在部署时正确转换连接字符串。

如果Azure门户网站中的连接字符串很好,我很确定它们在部署期间会搞砸。 WebDeploy倾向于使用连接字符串做一些奇怪的事情,你需要阻止它。因此,在部署时,在设置页面取消选中&#34;使用此连接字符串&#34;:

Web-deploy connection strings

一旦部署到Azure,您就可以通过Visual Studio 2013 Server Explorer检查web.config的状态:

VS2013 Server Explorer Web.config

或通过Kudu,您可以通过https://<mywebsitename>.scm.azurewebsites.net/DebugConsole访问并导航到web.config

Kudu diagnostic panel