Настройка строки подключения EF в Azure Web App
У нас есть приложение ASP.NET(MVC) и мы используем Entity Framework 6 для подключения к нашим базам данных. DbContext построен стандартным способом и загружает строку подключения от нашего имени. Сгенерированный код выглядит следующим образом:
public partial class MyContext : DbContext
{
public MyContext(string connectionName)
: base("name=" + connectionName)
{
}
}
Мы устанавливаем строку подключения в локальном web.config также стандартным образом:
<configuration>
<connectionStrings>
<add name="DefaultConnection"
connectionString="metadata=...;provider connection string="...""
providerName="System.Data.EntityClient" />
Когда мы публикуем приложение для Azure, мы переходим к Azure Portal, затем к настройкам веб-приложения, а затем к списку строк подключения. Там мы добавляем строку подключения EF, которую мы использовали локально. Когда мы перезапускаем и посещаем приложение, мы получаем ошибку времени выполнения в зависимости от типа выбранной строки подключения.
Для типа Custom
мы получаем следующую ошибку времени выполнения:
Ключевое слово не поддерживается: 'источник данных'.
Для SQL Server
или SQL Database
мы получаем следующую ошибку во время выполнения:
Ключевое слово не поддерживается: "метаданные".
Это действительно кажется простой историей, поэтому мы задаемся вопросом, что происходит не так.
Ответы
Ответ 1
Проблема заключается в экранированных кавычках: "
.
Строки подключения в web.config имеют кавычки, которые экранированы, потому что они сериализованы в атрибуте XML. При вводе строки соединения на портале Azure вы должны предоставить необработанную строку. Что-то вроде этого:
metadata=...;provider connection string="Data Source=..."
Ответ Дэвида Эббо хорош для подтверждения того, что среда настроена так, как вы ожидаете. Также полезно обратить внимание на файл .pubxml при публикации через мастер в Visual Studio: он попытается также заполнить строки подключения.
Ответ 2
'custom' должен быть правильным здесь. В этом случае имя поставщика остается неизменным, поэтому, если у вас есть System.Data.EntityClient
в вашей конфигурации, он должен оставаться после изменения времени выполнения Azure.
Попытайтесь перейти на Kudu Console и нажмите "Среда", чтобы убедиться, что строка conn выглядит там корректно.
Ответ 3
Если у вас есть эта строка в web.connfig
<add name="Entities" connectionString="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"" providerName="System.Data.EntityClient" />
Добавьте это на лазурный портал:
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
Убедитесь, что (как указано в первом ответе) заменить "
на "