Я только что работал над этой проблемой, но для функции Azure V1.При использовании EF с функцией Azure вы можете указать строку подключения в файле local.settings.json следующим образом:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"YourEntities": {
"ConnectionString": "metadata=res://*/EF.yourModel.csdl|res://*/EF.yourModel.ssdl|res://*/EF.yourModel.msl;provider=System.Data.SqlClient;provider connection string='data source=yourServer;initial catalog=yourDB;persist security info=True;user id=yourUserID;password=yourPwd;MultipleActiveResultSets=True;App=EntityFramework'",
"ProviderName": "System.Data.EntityClient"
}
}
}
Обратите внимание на атрибут ProviderName.Регистр должен быть точным, как показано выше, а провайдер должен быть «EntityClient» Plus «Строка соединения провайдера» атрибута фактической строки соединения должен быть в одинарных кавычках (я не уверен, почему Microsoft сделала это, но так и должно быть).
Это поможет вам локально запустить ваше функциональное приложение с EF без каких-либо изменений
Теперь для развертывания в Azure.local.settings.json не развертывается в облаке.Как следует из названия, он действует как файл конфигурации для локального запуска.Поэтому вам нужно установить строку подключения в «Конфигурации» приложения-функции Azure на портале.Там вы можете указать следующие параметры:
Name - 'YourEntities'
value - Just Connection string part from above json file
Type - 'Custom'
Slot Settings - according to your requirement
Теперь, если вы заметили, что здесь невозможно указать ProviderName.Если вы попытаетесь запустить функцию сейчас, вы получите сообщение об ошибке «отсутствует имя поставщика»
Здесь вам пригодится расширенный класс DBConfiguration.
Создайте свой класс конфигурации БД, как показано ниже, и укажите провайдера как EntityType.
public class YourDBContextConfig : DbConfiguration
{
public YourDBContextConfig()
{
SetProviderServices("System.Data.EntityClient",
SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}
Вы можете создать этот класс в том же файле, в котором вы создали частичный класс для вашего DBContext
Добавить следующий атрибут в свой класс Context: [DbConfigurationType (typeof (YourDBContextConfig))]
Также убедитесь, что у вашего класса частичного контекста есть конструктор, который принимает строку подключения в качестве параметра и указывает ее при инициализации контекста:
string connString =
ConfigurationManager.ConnectionStrings["YourEntities"].ConnectionString;
using (YourEntities db = new YourEntities(connString))
{
}
Это будет работать для развертывания.