MVC - в контексте всегда используется строка подключения по умолчанию

Я собираюсь взять MVC после предыдущей работы с веб-формами, и я делал урок по просмотру фильмов на asp.net, но у меня возникла проблема, которая крайне запутана.

У меня есть 2 строки подключения в моей веб-конфигурации:

<connectionStrings>
        <add name="MovieDBContext"
       connectionString="Data Source=(LocalDB)\(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True"
       providerName="System.Data.SqlClient" />
       <add name="DefaultConnection" connectionString="Data Source="(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-MvcMovie-20160408044847.mdf;Initial Catalog=aspnet-MvcMovie-20160408044847;Integrated Security=True"
          providerName="System.Data.SqlClient" />
</connectionStrings>

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

 public class MovieDBContext : DbContext
    {
        public MovieDBContext() : base("MovieDBContext"){ }

        public DbSet<Movie> Movies { get; set; }
    }

Что бы я ни делал, он использует строку подключения по умолчанию, а не строку подключения MovieDbContext, и я не могу понять почему. Если я устанавливаю источник данных для строки подключения по умолчанию равным источнику данных moviedbcontext, он работает как надо и подключается к нужной базе данных, но я не могу понять, почему он будет использовать ТОЛЬКО стандартную (я даже пытался изменить имена строки подключения и контекста безрезультатно)

Любая помощь приветствуется

ура

1 ответ

Попробуйте прокомментировать вызов базового конструктора в вашем производном классе DbContext и просто позвольте конструктору по умолчанию вызываться. Убедитесь, что ваша запись web.config для соединения находится в корневом файле web.config приложения и соответствует ожидаемым соглашениям об именах (подробнее см. Далее).

public class MovieDBContext : DbContext
{
  //// comment the call to the base constructor
  // public MovieDBContext() : base("MovieDBContext"){ }

  public DbSet<Movie> Movies { get; set; }
}

Документация MSDN по адресу https://msdn.microsoft.com/en-us/library/gg679577%28v=vs.103%29.aspx содержит информацию о соглашении, используемом для определения имени базы данных.

защищенный DbContext()

Создает новый экземпляр контекста, используя соглашения для создания имени базы данных, с которой будет установлено соединение. По соглашению имя - это полное имя (пространство имен + имя класса) производного класса контекста. Для получения дополнительной информации о том, как это используется для создания соединения, см. Раздел примечаний для DbContext.

Другие вопросы по тегам