我希望在以前使用网络表单之后选择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的数据源,它应该正常工作并连接到正确的数据库,但我无法解决为什么它只使用默认数据源(我甚至尝试更改名称)连接字符串和上下文无效)
任何帮助表示赞赏
干杯
答案 0 :(得分:0)
尝试在派生的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; }
}
https://msdn.microsoft.com/en-us/library/gg679577%28v=vs.103%29.aspx处的MSDN文档提供了有关用于确定数据库名称的约定的信息。
protected DbContext()
使用约定构造一个新的上下文实例,以创建将连接到的数据库的名称。按照惯例,名称是派生上下文类的全名(名称空间+类名)。有关如何使用它创建连接的更多信息,请参阅DbContext的备注部分。