Как указать EntityFramework ProviderName в функции Azure
Я пытаюсь перенести некоторый код веб-задания на новые функции Azure. До сих пор мне удавалось импортировать мои DLL и ссылаться на них успешно, но когда я использую строку соединения в своем коде, я получаю сообщение об ошибке, говоря, что мне нужно добавить ProviderName:
Строка подключения «ConnectionString» в файле конфигурации приложения не содержит обязательный атрибут providerName. "
Как правило, это не проблема, потому что в веб-задании (или веб-приложении) это будет в App или Web.config, а строка соединения будет просто перезаписана тем, что я ввел в Azure.
С функциями Azure у меня нет web.config (хотя я пытался добавить его безрезультатно), поэтому, естественно, отсутствует имя провайдера.
Как мне это указать?
РЕДАКТИРОВАТЬ: После некоторой игры вокруг и некоторых полезных советов от людей ниже, япочти удалось заставить его работать.
Теперь я делаю следующее:
var connString = **MY CONN STRING FROM CONFIG**; // Constring without metadata etc.
EntityConnectionStringBuilder b = new EntityConnectionStringBuilder();
b.Metadata = "res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl";
b.ProviderConnectionString = connString.ConnectionString;
b.Provider = "System.Data.SqlClient";
return new MyDB(b.ConnectionString);
Что дает мне то, что мне нужно для вызова базы данных. Я использую статический метод в частичном классе, чтобы получить экземпляр базы данных, которая выполняет вышеуказанный код, и я украшаю свой MyDB Partial с помощью[DbConfigurationType(typeof(MyDbConfiguration))]
Я определяю эту конфигурацию как:
public class MyDBConfiguration: DbConfiguration
{
public MyDBConfiguration()
{
SetProviderFactory("System.Data.EntityClient", EntityProviderFactory.Instance);
}
}
мойпроблема остается когда я хочу использовать EF Entities. Здесь он попытается инициализировать тип базы данныхиспользуя оригинальную конфигурацию, давая мне оригинальную ошибку еще раз. Согласно этой трассировке стека:
at Void Initialize()
at System.Data.Entity.Internal.EntitySetTypePair GetEntitySetAndBaseTypeForType(System.Type)
at Void InitializeContext()
at System.Data.Entity.Core.Objects.ObjectContext CreateObjectContextFromConnectionModel()
at Void Initialize()
at Boolean TryInitializeFromAppConfig(System.String, System.Data.Entity.Internal.AppConfig)
at Void InitializeFromConnectionStringSetting(System.Configuration.ConnectionStringSettings)
Таккак мне этого избежать? Я думаю, мне нужен способ подключиться ко всему и запустить мой пользовательский сеттер ..