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="data source=tcp:**********.database.windows.net,****;initial catalog=MySite;user id=username@**********;password=*******;MultipleActiveResultSets=True"" 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="
Data Source=<provideServerName>.database.windows.net;
Initial Catalog=MyDatabase;
Integrated Security=False;
User ID=<provideUserID>;
Password=providePassword>;
MultipleActiveResultSets=True;
Encrypt=True;
TrustServerCertificate=False""
providerName="System.Data.EntityClient"/>
</connectionStrings>
【讨论】:
我在您的连接字符串中看到的唯一区别是:Encrypt=true;TrustServerCertificate=false。我试过了,但没有用。我错过了什么吗?【参考方案3】:我在本地 web.config 上将连接字符串更改为远程 (Azure),然后在发布和发布 web.config 期间删除所有设置的连接字符串。它重写了删除 web.config。然后将本地 web.config 上的连接字符串返回到本地连接。现在可以正常使用了。
【讨论】:
以上是关于Azure 发布数据库第一个连接字符串不起作用的主要内容,如果未能解决你的问题,请参考以下文章
连接属性在 Azure ServiceBus 订阅触发的函数中不起作用