EF 4.1 код-первая строка подключения в web.config - PullRequest
4 голосов
/ 26 июля 2011

У меня сегодня немного кошмарный день. Я успешно работал над разработкой кода сначала локально, и все шло очень хорошо, моя БД была удалена и воссоздана по мере необходимости при изменении модели. Однако при попытке «обновить» проект до промежуточного сервера sqlserver2008 на mydiscountasp.net мои проблемы начались всерьез. Поскольку базы данных общего хостинга не могут быть удалены / воссозданы пользователем, я взял локальную резервную копию и восстановил ее на сервере. На шаг ближе ... Я вижу базу данных при входе на сервер через sqlserver mgt studio, и все выглядит нормально. Тем не менее, я не могу понять, как подключиться к базе данных через web.config. Я начал с использования скромного ado.net sysntax для строки подключения в соответствии с:

<add name="MyWebSiteContext" 
  connectionString="Server=esql2k123.discountasp.net;
  Database=SQL2008R2_123456_test;uid=SQL2008R2_123456_test_user;pwd=mypassword;" 
  providerName="System.Data.SqlClient"/>

это не сработало и выдало ошибку о том, что ключевое слово "сервер" не было распознано. после долгих поисков оказалось, что проблема вполне может быть связана с частью providerName="System.Data.SqlClient".

Итак, изменив это на providerName="System.Data.EntityClient", я был полон небольшой надежды. Увы, та же история.

Короче говоря, (очень) длинная история, я пробовал много перестановок (мутации - это оперативное слово !! :)), но, похоже, не могу найти правильное синтаксическое требование для требования строки соединения ef-code-first

Кто-нибудь недавно проходил подобный обруч и нашел рабочее решение?

пальцы рук и ног xx'd ..

[ОБНОВЛЕНИЕ] Мне удалось заставить мою строку подключения работать (почти), отформатировав ее следующим образом:

<add name="GBCWebSiteContext" 
connectionString="Data Source=esql2k123.discountasp.net;Initial Catalog=SQL2008R2_123456_test;Persist Security Info=True;MultipleActiveResultSets=True;User ID=SQL2008R2_123456_test_user;Password=mypass" providerName="System.Data.SqlClient"/>

Теперь я могу останавливать и отлаживать действие контроллера, когда оно выполняет выбор linq. ОДНАКО, при попытке вернуть строки, я теперь получаю исключение, которое гласит: Триггер возвратил набор результатов, а параметр сервера «Запретить результаты от триггеров» равен true

Итак, каков мой последний фрагмент головоломки здесь, является ли дополнительная опция в строке подключения для устранения этой проблемы ??

[ОБНОВЛЕНИЕ 2] Аллиллула - я сломал орех. Как я напомнил строку global.asax:

Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MyWebSiteContext>());

Я не понял, что мне нужно включить нулевую ссылку на Database.SetInitializer().

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

Database.SetInitializer<MyWebSiteContext>(null);

спасибо всем за различные предложения, они помогли мне сосредоточиться на проблеме. Так счастлив:)

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Сервер базы данных и веб-сервер находятся в одной среде? Вы пробовали Server=localhost; вместо Server=esql2k123.discountasp.net;?

Или, альтернативно, вы можете узнать, какой IP-адрес имеет сервер базы данных, откуда находится веб-сервер?

2 голосов
/ 27 июля 2011

Итак, по сути, ответ на мою проблему был двояким:

  1. строка соединения должна быть такой же (просто вставка информации о строке соединения, все остальное остается таким же, как указано выше):

    connectionString = "Источник данных = esql2k123.discountasp.net; Начальный каталог = SQL2008R2_123456_test; Информация о персистентной безопасности = True; MultipleActiveResultSets = True ; ИД пользователя = SQL2008R2_123456_test_user; Пароль = 1010"

  2. global.asax Application_Start (или, как в случае с моим приложением, объект OnApplicationStarted ()) должен был иметь нулевую Database.SetInitializer<>() функцию, которая напоминает существующее:

Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<MyWebSiteContext>());

вызвал проблему. Заменив это на Database.SetInitializer<MyWebSiteContext>(null);

исправили проблему оптом.

спасибо за то, что поделились путешествием и своими мыслями, и, надеюсь, это послужит отправной точкой для всех, у кого возникли подобные проблемы.

2 голосов
/ 26 июля 2011

Вы пробовали источник данных и исходный каталог?

sqlConnectionString="data source=myServer.myDomain.com;initial catalog=mydbName;user id=myUid;password=myPwd"
...