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

时间:2013-04-01 09:10:37

标签: c# asp.net-mvc entity-framework azure publish

我已经完成了在天蓝色门户网站上首先使用数据库发布我的网络应用程序的步骤。

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

  

使用数据库优先和模型的T4模板生成的代码   如果在Code First模式下使用,则第一次开发可能无法正常工作。   要继续使用Database First或Model 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应用程序可以很好地连接到远程数据库。只有当我发布到azure时它才会失败。

3 个答案:

答案 0 :(得分:4)

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

如果你做了同样的“错误”我做了,这就是正在发生的事情...... Azure部署的应用程序没有在你的web.config中找到你的连接字符串“MySiteEntities”。相反,在您创建Azure网站(或Cloud Service或其他)时,您创建了一个关联的Azure SQL数据库,并为其连接字符串指定了完全相同的名称“MySiteEntities”。后一个连接字符串是没有Model / Database-first元数据引用的“普通”连接字符串,因此被EF视为Code-First连接,然后抱怨冲突。有关此区别的解释,请参阅Code First vs. Database First

答案 1 :(得分:0)

应该是:

        <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>

答案 2 :(得分:0)

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