更改解决方案的物理目录后无法附加到.mdf文件

时间:2014-04-29 03:12:11

标签: c# entity-framework ef-code-first sql-server-express ef-migrations

我正在关注Pluralsight上的MVC4教程,我的所有演示项目都是通过Visual Studio Online进行源代码控制的,目前我只在本地进行测试(未部署到Azure或其他任何东西)。我正在开发一个利用EF5,代码优先模型的ASP.NET MVC4应用程序。我启用了迁移,并创建了以下类,我更新了种子方法并启用了自动迁移。

internal sealed class Configuration : DbMigrationsConfiguration<MyProject.Models.MyProjectContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(MyProject.Models.MyProjectContext context)
    {
        context.MyCollection.AddOrUpdate(v => v.attr1,
            new MyProject() { attr1 = "MVC4", attr2 = 120},
            new MyProject() { attr1 = "LINQ", attr2 = 200});

        context.SaveChanges();
    }
}

我正在使用带有动态数据目录的localDb实例的默认连接字符串(不对路径进行硬编码)。

"AttachDBFilename=|DataDirectory|\MyProject.Models.MyProjectContext.mdf"

在我决定更改解决方案的物理目录之前,一切都按预期工作。我将目录从默认的C:/user/documents/visual studio 2013/projects文件夹更改为D:/VisualStudio的另一个存储驱动器。我更新了源代码控制的映射,并将项目下拉到新位置。

然而,当我运行我的项目时,我不再有任何数据。实际上,如果没有收到以下错误消息,我就无法运行update-database命令:

  

无法附加文件&#39; D:\ Visual Studio \ MyProject \ MyProject \ App_Data \ MyProject.Models.MyProjectContext.mdf&#39; as database&#39; MyProject.Models.MyProjectContext&#39;。

我尝试关闭自动迁移,重新运行&#34; enable-migrations&#34;命令,并尝试硬编码存储.mdf文件的路径,但它永远不会&#34;附加&#34;到数据库。我知道数据库不再存在,但是如果我运行update-database -force命令,如果系统没有找到数据库,它将创建一个新数据库。

有人可以协助我重新获取.mdf文件夹中的App_Data文件吗?

保留现有数据不是问题,我只需要有一个新的数据库继续为教程工作。

1 个答案:

答案 0 :(得分:2)

您可以尝试多种选项,应用程序应该可以再次运行。

选项1

在web.config文件中重命名数据库名称,然后再次运行Update-Database

选项2

从web.config文件中删除以下行,然后再次运行Update-Database

AttachDbFilename=|DataDirectory|DataContext.mdf

选项3

由于您已启用迁移,因此请从服务器资源管理器中删除数据库,并从应用程序中的app_data文件夹中的Object explorer和.mdf文件中删除该数据库。然后再次运行Update-Database

我相信所有这些选项都应该可以运作