重命名connectionString后,键attachdbfilename的值无效

时间:2013-03-12 17:08:41

标签: asp.net-mvc-4 entity-framework-5

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

<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,则错误消失。

有人能告诉我这个原始名称的引用位置吗?

2 个答案:

答案 0 :(得分:2)

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

或者,最好放在Scott

  

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

修改

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

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

答案 1 :(得分:0)

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

我从web.config中删除了整个connectionString,所有内容仍然正常运行。

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