我创建了一个新的类库(包)项目(在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也无效?
答案 0 :(得分:4)
编辑1.0.0: Migrator.EF6现在支持1.0.0。
RC2的编辑: Migrator.EF6现在支持RC2。
我们需要的是一个dnx命令行工具,它包装EF6并将命令委托给它。这是因为DNX项目不会看到让init.ps1
工作所需的install.ps1
和Add-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?