如何在asp.net 5项目中启用迁移(EF6)?

时间:2015-05-13 16:18:57

标签: entity-framework-6 asp.net-core

我创建了一个新的类库(包)项目(在VS 2015 RC之前使用了更糟糕的asp.net类库名称来表示数据层。为了清楚这是更新的kproj样式结构。

将EF 6.1.3添加到project.json。目前仅针对DNX451。

   "dependencies": {
        "EntityFramework": "6.1.3"
        ,"Moq": "4.2.1502.911"
    },

创建初始模型类并使用AlwaysCreate数据库初始化程序一切正常。现在需要切换到迁移,以便在包管理器控制台中使用启用 - 迁移并获得:

Enable-Migrations : The term 'Enable-Migrations' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Enable-Migrations
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Enable-Migrations:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

对于EF7迁移,迁移命令不支持包管理器。相反,有一个新的ef命令在dnu中运行但是新进程只适用于EF7而不是EF6吗?

为什么包管理器认为即使引用了EF6,Enable-Migrations也无效?

4 个答案:

答案 0 :(得分:4)

编辑1.0.0: Migrator.EF6现在支持1.0.0。

RC2的编辑: Migrator.EF6现在支持RC2。

我们需要的是一个dnx命令行工具,它包装EF6并将命令委托给它。这是因为DNX项目不会看到让init.ps1工作所需的install.ps1Add-Migration(至少现在,请参阅this)。

实施并不是那么难,但似乎没有人给它时间,所以我最终做了一次。

此解决方案不需要单独的.csproj,相同的工作流程会发生,而不是Update-Database您将执行dnx ef database update和类似的命令。

可以找到说明和示例here: Migrator.EF6

稍后,可能在RTM中,您也可以在DNX项目中使用它们。这可能就是为什么微软没有支持EF6迁移的原因。

答案 1 :(得分:3)

  

为什么包管理器认为即使引用了EF6,Enable-Migrations也无效?

因为我假设并且非常确定ASP.NET 5项目不会调用在软件包内部安装和卸载PowerShell脚本,而EF 6软件包必须将迁移命令添加到软件包管理器控制台。您最好的运气是尝试在EF6 NuGet包中集成命令行工具(我相信它名为migrate.exe,不确定)。

答案 2 :(得分:2)

我已经设法通过创建一个旧的.csproj项目来实现这个目标,Enable-Migrations命令可以运行。唯一的区别是,我没有单独的文件副本,而是在添加现有文件时使用“按链接添加”选项通过引用添加它们。

现在我可以添加迁移等并根据需要更改文件,这些更改将自动反映在我的.xproj中,因为它是相同的文件。

答案 3 :(得分:-4)

在asp.net 5项目中,您必须使用实体框架7并从命令行使用ef migration命令。

我刚刚在这里进行了一次回顾How can I manage EF 6 migrations in visual studio 2015?