Azure 发布数据库第一个连接字符串不起作用

Posted

技术标签:

【中文标题】Azure 发布数据库第一个连接字符串不起作用【英文标题】:Azure Publish Database First Connection String Not Working 【发布时间】:2013-04-01 09:10:37 【问题描述】:

我已经完成了在 Azure 门户上首先使用数据库发布我的 Web 应用程序的步骤。

但是,当我发布时,我收到以下错误消息:

使用 Database First 和 Model 的 T4 模板生成的代码 如果在 Code First 模式下使用,首次开发可能无法正常工作。 要继续使用数据库优先或模型优先,请确保实体 框架连接字符串在配置文件中指定 执行应用程序。要使用这些类,它们是从生成的 数据库优先或模型优先,使用代码优先添加任何额外的 使用属性或 DbModelBuilder API 进行配置,然后 删除引发此异常的代码。

web.config中我的连接字符串被发布修改后:

<add name="MySiteEntities" connectionString="metadata=res://*/MySite.csdl|res://*/MySite.ssdl|res://*/MySite.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:**********.database.windows.net,****;initial catalog=MySite;user id=username@**********;password=*******;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

我的上下文(由 edmx 生成):

public partial class MySiteEntities : DbContext

    public MySiteEntities()
        : base("name=MySiteEntities")
    
    
...

我很困惑,因为似乎实体框架试图首先使用代码而不是数据库。

更新: 我刚刚尝试在本地使用相同的连接字符串,并且 Web 应用程序似乎运行良好。 Web 应用程序确实可以很好地连接到远程数据库。只有当我发布到天蓝色时它才会失败。

【问题讨论】:

【参考方案1】:

在Entity framework work locally but not on azure阅读我对类似问题的回答。

如果您犯了与我相同的“错误”,这就是正在发生的事情...... Azure 部署的应用程序在您的 web.config 中找不到您的连接字符串“MySiteEntities”。相反,在您创建 Azure 网站(或云服务或其他)时,您创建了一个关联的 Azure SQL 数据库,并为其连接字符串提供了完全相同的名称“MySiteEntities”。后一个连接字符串是没有模型/数据库优先元数据引用的“普通”连接字符串,因此被 EF 视为代码优先连接,然后抱怨冲突。请参阅 Code First vs. Database First 了解有关此区别的说明。

【讨论】:

是的,这是我的问题。我在 Azure 和我的 web.config 中配置了相同的连接字符串名称。我在 Azure 中更改了名称,并在将发布代码部署到 Azure 时使用了 VS2012 中的 Web.Release.config 转换来更改字符串。一切都很好,我可以连接到我的 EF 数据库。【参考方案2】:

应该是:

        <connectionStrings>
            <add name="MyDatabaseModelEntities" 
                       connectionString="metadata=res://*/MyDBModel.csdl|res://*/MyDBModel.ssdl|res://*/MyDBModel.msl;
                       provider=System.Data.SqlClient;
                       provider connection string=&quot;
                       Data Source=<provideServerName>.database.windows.net;
                       Initial Catalog=MyDatabase;
                       Integrated Security=False;
                       User ID=<provideUserID>;
                       Password=providePassword>;
                       MultipleActiveResultSets=True;
                       Encrypt=True;
                       TrustServerCertificate=False&quot;" 
                       providerName="System.Data.EntityClient"/>
        </connectionStrings>

【讨论】:

我在您的连接字符串中看到的唯一区别是:Encrypt=true;TrustServerCertificate=false。我试过了,但没有用。我错过了什么吗?【参考方案3】:

我在本地 web.config 上将连接字符串更改为远程 (Azure),然后在发布和发布 web.config 期间删除所有设置的连接字符串。它重写了删除 web.config。然后将本地 web.config 上的连接字符串返回到本地连接。现在可以正常使用了。

【讨论】:

以上是关于Azure 发布数据库第一个连接字符串不起作用的主要内容,如果未能解决你的问题,请参考以下文章

连接属性在 Azure ServiceBus 订阅触发的函数中不起作用

Azure 流分析:SQL 输出不起作用

为啥 Azure 事件中心订阅者不起作用?

连接字符串不起作用[重复]

使用时连接字符串不起作用(数据源 =.\SQLExpress)

字符串连接在 SQLite 中不起作用