EF Code First - 如何部署到Azure

时间:2018-01-08 04:23:07

标签: asp.net-web-api ef-code-first azure-web-sites

我一整天都在苦苦挣扎。

我无法让我的WebApi访问我的数据库。 我在实体框架中使用Code First方法。

当我部署时,会在web.config中添加一个新的连接字符串。 这提出了一个例外:

这是我在web.config(本地)中获得的:

<connectionStrings>
    <add name="ArquitecturaNativaDB" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=ArquitecturaNativaDB;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
  </connectionStrings>

这就是我在部署时所做的事情: enter image description here 显然,部署时应该使用连接字符串。

我曾经认为,在部署应用程序时,我的web.config已被修改,我在本地使用的连接字符串将替换为图像文本框中的那个。

但不,相反,我在我的服务器中得到了这个:

<connectionStrings>
    <add name="ArquitecturaNativaDB" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=ArquitecturaNativaDB;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
    <add name="ArquitecturaNativaDB_DatabasePublish" connectionString="Data Source=mydbserver;Initial Catalog=mydb;Integrated Security=False;User ID=myuserid;Password=mypassword" providerName="System.Data.SqlClient" />
  </connectionStrings>

ArquitecturaNativaDB_DatabasePublish在那里做什么? 我相信这是我问题的根源,因为当我提出请求时,我得到一个异常响应:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.

这是我的DbContext的构造函数:

public ApplicationDbContext()
            : base("name=ArquitecturaNativaDB", throwIfV1Schema: false)
        {
            Configuration.ProxyCreationEnabled = true;
            Configuration.LazyLoadingEnabled = true;
        }

我已经厌倦了尝试解决这个问题。 任何一只手?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用web.config转换,而不是使用Web部署设置。

Transform

    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MyDB" 
      connectionString="ReleaseSQLServer" 
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>

它的解决方法比修复更多,但它应该有效。

答案 1 :(得分:0)

如果要确保所需的连接字符串是正在使用的连接字符串,请在Azure门户中的Web App的应用程序设置刀片上指定连接字符串。向下滚动到Connection Strings部分,并在那里指定您的连接字符串。此处指定的内容优先于web.config文件中的任何内容。走这条路线也意味着如果你确实发布了错误的配置(使用调试配置而不是发布配置或你为web.config转换定义的任何其他配置),你仍然会使用正确的连接字符串。