【问题标题】:Azure Publish Database First Connection String Not WorkingAzure 发布数据库第一个连接字符串不起作用
【发布时间】: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 应用程序确实可以很好地连接到远程数据库。只有当我发布到天蓝色时它才会失败。

【问题讨论】:

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


    【解决方案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 上的连接字符串返回到本地连接。现在可以正常使用了。

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      相关资源
      最近更新 更多