4

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

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

如果在 Code First 模式下使用,使用用于 Database First 和 Model First 开发的 T4 模板生成的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在执行应用程序的配置文件中指定了实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,使用 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 应用程序确实可以很好地连接到远程数据库。只有当我发布到天蓝色时它才会失败。

4

3 回答 3

4

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

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

于 2013-04-07T04:16:47.140 回答
0

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

于 2013-08-13T14:42:06.910 回答
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>
于 2013-04-01T09:39:34.233 回答