我在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,但它说它无法连接到本地数据库。任何想法可能是一个什么问题?
谢谢!
答案 0 :(得分:5)
我找到了解决方案。使用最新的SQL Server Management工作室,连接到本地数据库没有问题。需要像这样建立连接:
登录后,即使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命令解决了这个问题。