Ответ 1
Решение моей проблемы заключалось в выборе "Пользовательский" вместо "SQL Azure" из селектора SQL Azure/SQL Server/MySQL/Custom для Entity Строка соединения с базой данных, даже если база данных работает на SQL Azure.
На портале управления Windows Azure (Preview) вы можете изменить параметры конфигурации для веб-сайтов (см. http://www.windowsazure.com/en-us/manage/services/web-sites/how-to-configure-websites/#howtochangeconfig).
В настоящее время я устанавливаю строку подключения для моего соединения ADO.NET Entity Framework через Web.Release.Config, но я хочу установить его через портал управления, но независимо от того, что я использую, я всегда получаю следующую ошибку:
Указанное именованное соединение либо не найдено в конфигурация, не предназначенная для использования с поставщиком EntityClient, или недействительны.
Он работает для регулярных строк соединения, то есть без ключа метаданных, определяющего метаданные и информацию о сопоставлении (csdl, ssdl, msl).
Вот что я делаю:
Я перехожу к https://manage.windowsazure.com/#Workspaces/WebsiteExtension/Website/[MY-STAGING-SITE-NAME]/configure
В разделе "строки подключения" у меня есть ключ с именем "ApplicationServices", который выглядит так:
Server = ТСР: xxxxx.database.windows.net, 1433; Database = ххххх; Пользователь ID = ххххх ххххх @; Password = ххххх; Trusted_Connection = False; Encrypt = True; Соединение Тайм-аут = 30;
Это работает.
У меня есть еще один ключ для соединения Entity Framework. Позвольте назвать этот FooBarContext. Это выглядит так:
метаданные = разрешение:///Models.FooBarContext.csdl | Рез:///Models.FooBarContext.ssdl | Рез://*/Models.FooBarContext.msl; поставщик = System.Data.SqlClient; поставщик соединение строка = "Server = ТСР: fooserver.database.windows.net, 1433; Database = Foobar; Пользователь ID = MyName @fooserver; Password = XXXXXXXXXX; Trusted_Connection = False; Encrypt = True; Соединение Тайм-аут = 30;"
Это вызывает ошибку, описанную выше. Он копируется из рабочего значения в Web.Release.Config с помощью " заменен на.
Я пробовал другие варианты: с помощью " нетронутый, с добавлением метаданных в конце, но безрезультатно. Я воспроизвел проблему со вторым веб-сайтом.
Решение моей проблемы заключалось в выборе "Пользовательский" вместо "SQL Azure" из селектора SQL Azure/SQL Server/MySQL/Custom для Entity Строка соединения с базой данных, даже если база данных работает на SQL Azure.
Заменить
"
с
"
В строке подключения.
Я не только использовал двойные кавычки (или одиночные кавычки) вместо "
(и выбирал Custom для этого типа), но я также должен был убедиться, что в моей конфигурации преобразования было фиктивное значение. Я заменил все connectionStrings node, но решил сохранить это и добавить следующее:
<add xdt:Transform="Replace" xdt:Locator="Match(name)" name="FooBarEntities" connectionString="temp" providerName="System.Data.EntityClient" />
Без этого я получил следующую ошибку:
The connection string 'FooBarEntities' in the application configuration file does not contain the required providerName attribute.
У меня была та же проблема. Я решил, вставив в web.config эту строку соединения:
<add name="eManagerTurModelConnection" connectionString="metadata=res://*/ORM.eManagerFinanceModel.csdl|res://*/ORM.eManagerFinanceModel.ssdl|res://*/ORM.eManagerFinanceModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=<server>.database.windows.net;Initial Catalog=eManagerTur;Integrated Security=False;User ID=<user>;Password=<Password>;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
И после того, как я удалил строку подключения моего сайта, работал, потому что не получал строку подключения, которую я добавил в свой web.config.
Английский плохой... =)