ASP.NET MVC4代码优先 - '无法附加文件作为数据库'异常

时间:2013-03-29 11:01:02

标签: asp.net database entity-framework asp.net-mvc-4 ef-code-first

我在Entity Framework中使用Code First概念,并且在启动应用程序时我不断遇到以下异常:

Cannot attach the file 'C:\Users\Admin\Documents\Visual Studio 2012\
Projects\Pro\Pro.Web\App_Data\Pro.mdf' as database 'Pro'.

我把它放在Global.asax.cs中,但也没有成功:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ProWebContext>());
        var ctx = new ProWebContext();
        ctx.Database.Initialize(true);

我在App_Data目录下检查过,没有创建数据库。此外,在Server Explorer下,Data Connections下没有任何内容。昨天一切都很好,今天根本不工作。我曾尝试使用SQL Server Management studio连接到LocalDB,但它说它无法连接到本地数据库。任何想法可能是一个什么问题?

谢谢!

4 个答案:

答案 0 :(得分:5)

我找到了解决方案。使用最新的SQL Server Management工作室,连接到本地数据库没有问题。需要像这样建立连接:

enter image description here

登录后,即使App_Data目录下和Visual Studio中的服务器资源管理器中的数据连接下没有任何内容,我们仍然可以看到旧数据库。当我们从SQL Server Management studio删除该数据库并再次启动应用程序时,附加数据库时不会再出现错误。

答案 1 :(得分:1)

我遇到了同样的问题,但上面的答案有所帮助,解决方案却有所不同。

就我而言,我正在重用已经创建了数据库的项目。由于配置中的名称是相同的,它抛出了异常,误导了真正的解决方案。

值得检查数据库是否未创建,并且与之前使用的数据库不同。更改名称并继续。

答案 2 :(得分:0)

当我看到这个时遇到了同样的错误,但我无法使用SQL Server Management Studio删除数据库,因此我记得IDatabaseInitializer

为我的Code First上下文设置数据库初始化程序解决了这个问题。在我的情况下,添加一个初始化程序以始终删除数据库工作(我在我的上下文的静态构造函数中添加了代码,大多数人将它添加到Global.asax中):

    static SomeDbContext()
    {
        System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseAlways<SomeDbContext>());
    }

当然还有其他初始化者。

答案 3 :(得分:0)

我手动删除了mdf文件,因此代码会再次重新创建它,并遇到同样的问题。我通过在包管理器控制台中运行update-database命令解决了这个问题。