0

我正在为 ASP.NET MVC 4 构建示例 MvcMovie 教程。我正在使用 EntityFramework Code First 功能并创建了一个连接字符串,如下所示。

<add name="MoveDBContext"
     connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDictionary|\Movies2.mdf;Integrated Security=True"
     providerName="System.Data.SqlClient"
/>

此时一切正常。但后来我意识到我将连接字符串命名为 MoveDBContext 而不是 MovieDBContext,并且作为完美主义者,我将其重命名。这样做之后,我现在在我的 MoviesController/Index 方法中收到一个错误。

 public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    public ActionResult Index()
    {
        return View(db.Movies.ToList()); // Error: Invalid value for key 'attachdbfilename'
    }
...
}

如果我将名称改回 MoveDBContext,错误就会消失。

谁能告诉我这个原始名称在哪里被引用?

4

2 回答 2

2

默认情况下,EF 会查找与扩展 DbContext 的类型同名的连接字符串。

或者,最好由Scott提出:

默认情况下,当您使用 EF 代码优先创建 DbContext 类时,它将查找与上下文类名称匹配的连接字符串。由于我们将上下文类命名为“NerdDinners”,默认情况下,当它在我们的 ASP.NET 应用程序中实例化时,它将查找并使用上述“NerdDinners”数据库连接字符串。

编辑:

仔细观察后,我认为您的连接字符串是问题所在。你有DataDictionary而不是DataDirectory. 试试这个(为可读性添加了换行符):

<add name="MovieDBContext" 
     connectionString="Data Source=(LocalDB)\v11.0;
                       AttachDbFilename=|DataDirectory|\Movies.mdf;
                       Integrated Security=True" 
     providerName="System.Data.SqlClient" />
于 2013-03-12T17:14:04.713 回答
0

显然,正如 Ken 所说,MoveDBContext 没有被引用。

我从 web.config 中删除了整个 connectionString,一切仍然正常。

所以,它仍然引出了一个问题,“Visual Studio 是如何知道在我的 SQLExpress 实例中创建数据库的?” 和“在哪里配置?”

于 2013-03-13T18:56:58.560 回答