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.