Настройка строки подключения EF в Azure Web App

у нас есть приложение ASP .NET (MVC) и мы используем Entity Framework 6 для подключения к нашим базам данных. DbContext построен стандартным образом и загружает строку соединения от нашего имени. Сгенерированный код выглядит следующим образом:

public partial class MyContext : DbContext
{
    public MyContext(string connectionName)
        : base("name=" + connectionName)
    {
    }
}

мы задаем строку подключения в локальной сети.config также стандартным способом:

<configuration>
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="metadata=...;provider connection string=&quot;...&quot;" 
         providerName="System.Data.EntityClient" />

когда мы публикуем приложение в Azure, мы переходим к порталу Azure, затем к настройкам веб-приложения, а затем к списку соединений Веревка. Там мы добавляем строку подключения EF, которую мы использовали локально. При перезапуске и посещении приложения мы получаем ошибку времени выполнения в зависимости от типа строки подключения, которую мы выбираем.

на Custom введите мы получаем следующую ошибку времени выполнения:

Ключевое слово не поддерживается: 'источник данных'.

на SQL Server или SQL Database мы получаем следующую ошибку во время выполнения:

Ключевое слово не поддерживается: "метаданные".

Это действительно кажется простой историей, поэтому нам интересно, что происходит не так.

3 ответов


проблема в экранированных кавычках:&quot;.

строки подключения в web.config имеют кавычки, экранированные, потому что они сериализуются в атрибуте XML. При вводе строки подключения на портале Azure необходимо указать необработанную строку без эскапады. Что-то вроде этого:--3-->

metadata=...;provider connection string="Data Source=..."

ответ Дэвида Эббо хорош для подтверждения того, что среда настроена так, как вы ожидаете. Также полезно обратить внимание наpubxml файл, когда публикация с помощью мастера в Visual Studio: он также попытается заполнить строки подключения.


'custom' должен быть правильным здесь. В этом случае providerName остается неизменным, поэтому, если у вас есть System.Data.EntityClient в вашей конфигурации это должно остаться после того, как среда выполнения Azure изменит его.

найти Консоль Kudu и нажмите на среду, чтобы убедиться, что строка conn выглядит правильно.


Если у вас есть эта линия в интернете.connfig

<add name="Entities" connectionString="metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX&quot;" providerName="System.Data.EntityClient" />

добавьте это в Azure portal:

Name Column => Entities

Value Column => metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX" 

"Custom" - In the drop selection box

убедитесь ,что (как указано в первом ответе) заменить &quot; С "