2

在之前使用过 Web 表单之后,我正在寻找 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的数据源,它可以正常工作并连接到正确的数据库,但我无法弄清楚为什么它只会使用默认的数据库(我什至尝试过更改名称连接字符串和上下文无济于事)

任何帮助表示赞赏

干杯

4

1 回答 1

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 文档提供了有关用于确定数据库名称的约定的信息。

受保护的 DbContext()

使用约定构造一个新的上下文实例,以创建将与之建立连接的数据库的名称。按照约定,名称是派生上下文类的全名(命名空间 + 类名)。有关如何使用它来创建连接的更多信息,请参阅 DbContext 的备注部分。

于 2016-04-26T19:21:06.913 回答