ASP.NET MVC4代码优先-';无法将文件附加为数据库';例外

ASP.NET MVC4代码优先-';无法将文件附加为数据库';例外,asp.net,database,entity-framework,asp.net-mvc-4,ef-code-first,Asp.net,Database,Entity Framework,Asp.net Mvc 4,Ef 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 DropCreateDatabaseIfModel

我在实体框架中使用代码优先的概念,在启动应用程序时,我经常遇到以下异常:

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);
Database.SetInitializer(新的DropCreateDatabaseIfModelChanges());
var ctx=新建ProWebContext();
ctx.Database.Initialize(true);
我在App_数据目录下进行了检查,没有创建任何数据库。此外,在服务器资源管理器下,数据连接下没有任何内容。昨天一切正常,今天一点也不正常。我曾尝试使用SQLServerManagementStudio连接到LocalDB,但它说它无法连接到本地数据库。有什么问题吗


谢谢

我找到了解决办法。使用最新的SQL Server Management studio,连接到本地数据库时没有问题。需要像这样建立连接:


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

当我看到这一点时,我遇到了相同的错误,但我无法使用SQL Server Management studio删除该数据库,因此我想起了
IDatabaseInitializer

为“代码优先”上下文设置数据库初始值设定项解决了此问题。在我的例子中,添加一个初始值设定项来始终删除DB是有效的(我在我的上下文的静态构造函数中添加了代码,大多数人将其添加到Global.asax中):

static SomeDbContext()
{
System.Data.Entity.Database.SetInitializer(新的DropCreateDatabaseAlways());
}

当然还有其他的初始值设定者。

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

在我的例子中,我重用了一个已经创建了数据库的项目。由于配置中的名称是相同的,所以它抛出了异常,错误地引导了真正的解决方案


值得检查的是,数据库没有创建,并且与您以前使用的数据库不同。更改名称并继续。

我手动删除了mdf文件,因此代码将再次重新创建它,并且遇到了相同的问题。我通过在package manager控制台中运行update database命令解决了此问题。

答案很有趣,但我认为有一种标准的方法可以解决此问题,请参阅我的答案。@Mzn您的答案并没有为我解决此问题。在尝试之后,我仍然需要从内存中删除数据库(我已经从文件系统中删除了它)。我没有安装SSMS,但我能够使用Visual Studio中的SQL Server对象资源管理器查找并删除仍然存在的数据库引用。@StaffordWilliams因此解决方案仍然是删除数据库以允许EF重新创建它。Cristiano的方法是手动完成,我的方法是通过DB初始化器完成。我不知道为什么在你的情况下使用初始值设定项不起作用。框架使用的帐户是否没有删除数据库的权限?如果你想再次删除/重新创建,你打算再次手动执行吗?@Mzn是的,我不确定,我想当/如果我来的话,我会穿过那座桥。
    static SomeDbContext()
    {
        System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseAlways<SomeDbContext>());
    }