ASP.NET EFCodeFirst не использует правильную строку подключения

Я пытаюсь опубликовать веб-сайт, используя ASP.NET MVC3 EF и CODEFIRST с бэкэндом SQL Server 2008. На моем локальном компьютере я использовал базу данных SQL Express для разработки, но теперь, когда я запускаю ее в прямом эфире, я хочу использовать свою производственную базу данных, размещенную на хосте. Проблема в том, что когда я пытаюсь запустить приложение, оно все еще использует мою локальную строку подключения к базе данных. Я полностью удалил старую строку подключения из файла web.config и использую тег <clear /> перед созданием новой строки подключения. Я также очистил решение и перестроил его, но каким-то образом он все еще подключается к старой базе данных. Что мне не хватает?

Это новая строка подключения:

  <connectionStrings>
    <clear />
    <add name="CellularAutomataDBContext"
         connectionString=" Server=XXX;
         Database=CellularAutomata; User ID=XXX; Password=XXX; Trusted_Connection=False" 
         providerName="System.Data.SqlClient" />  
  </connectionStrings>

ОБНОВЛЕНИЕ

Когда я отлаживаю и смотрю на объект DBCONTEXT, это то, что отображается для его подключения:

Data Source=.\\SQLEXPRESS;Initial Catalog=CellularAutomata.Models.D1K2N3CARuleDBContext;Integrated Security=True;MultipleActiveResultSets=True"

Я не уверен, почему это происходит, потому что я нигде не могу найти его установленным. Кроме того, в конфигурации указано LazyLoadingEnabled = true, я предполагаю, что это может быть частью проблемы, возможно, он не загружает новую строку подключения. Где изменить эти параметры?

ОБНОВЛЕНИЕ 2

EFCodeFirst использует строку подключения по умолчанию, я не могу понять, как заставить ее принимать строку подключения, указанную в файле web.config.


person Doug S.    schedule 25.02.2011    source источник
comment
Я думаю, что если ваш локальный компьютер на самом деле не имеет статического IP-адреса, который вы явно использовали в строке подключения, то я не вижу, как опубликованное приложение будет подключаться к нему. Вы создали базу данных в папке AppData? Вы публикуете эту папку?   -  person Kiril    schedule 25.02.2011
comment
@Lirik, я не использую IP-адрес в строке подключения, и EFCodeFirst позаботится о создании базы данных. Я действительно в недоумении, почему это происходит.   -  person Doug S.    schedule 25.02.2011
comment
@Doug S. Так что, вероятно, это означает, что веб-приложение не подключается к базе данных на вашем локальном компьютере ... вы также публикуете папку AppData? У вас есть что-то в папке AppData?   -  person Kiril    schedule 25.02.2011
comment
@Lirik, в папке AppData ничего нет.   -  person Doug S.    schedule 25.02.2011
comment
@ Дуг С. ДОХ! Извините, все это время я думал, что вы видите эту проблему с опубликованным веб-сайтом, вместо этого вы видите проблему, когда запускаете/отлаживаете ее на своем локальном компьютере... пожалуйста, не обращайте внимания на мои предыдущие комментарии!   -  person Kiril    schedule 25.02.2011
comment
Должно быть, откуда-то получается эта строка подключения... найдите во всех файлах поиск SQLEXPRESS или что-то еще уникальное из этой строки подключения.   -  person Charlino    schedule 25.02.2011


Ответы (3)


Таким образом, при использовании EF CodeFirst используется строка подключения по умолчанию. Если вы хотите иметь возможность использовать настраиваемую строку подключения, необходимо соблюдать несколько рекомендаций по параметрам.

name ="this must match the name of your database context class"
connectionString="Server=yourserverurl; Database=yourdatabasename; User ID=youruserid; 
Password=yourpassword; Initial Catalog=the name of the database to use;
Trusted_Connection=False"
providerName="System.Data.SqlClient"

Пока это работает для меня.

person Doug S.    schedule 25.02.2011

Показанный вами connectionString не является строкой подключения EF. EF не будет его использовать. Значит, вы меняете не то.

EF connectionString будет включать providerName="System.Data.EntityClient"

person Craig Stuntz    schedule 25.02.2011
comment
Я не совсем уверен, что происходит тогда. Я точно использую EFCodeFirst, и это единственная строка подключения, которую я могу найти. Старый использовал то же имя провайдера и работал нормально. - person Doug S.; 25.02.2011
comment
Я не понял. Я думал, что Code-First — это просто часть структуры сущностей. - person Doug S.; 25.02.2011
comment
Это. Но для этого не требуется файл EDMX. Следовательно, строка подключения, которую вы показываете, действительна. Но мне интересно, правильно ли вы меняете. Если у вас есть несколько сборок, поищите строки подключения с похожими именами в другом месте. - person Craig Stuntz; 25.02.2011

Он будет искать то же имя, что и ваш контекст, и в зависимости от того, что еще вы используете, другие имена. Я обычно использую следующее для управления определенными функциями с одинаковыми или определенными строками подключения (например, я храню службы приложений в другой базе данных, чтобы EFCF мог удалять таблицы по мере необходимости):

<connectionStrings>
  <add name="MyAppContext" .../>
  <add name="ApplicationServices" .../>
  <add name="DefaultConnection" .../>
</connectionStrings>
person neo    schedule 11.11.2011