我刚遇到了同样的问题,我使用了以下解决方案(全部来自包管理器控制台)
PM> Enable-Migrations -MigrationsDirectory "Migrations\ContextA" -ContextTypeName MyProject.Models.ContextA
PM> Enable-Migrations -MigrationsDirectory "Migrations\ContextB" -ContextTypeName MyProject.Models.ContextB
这将在“迁移”文件夹中创建2个单独的文件夹,每个文件夹将包含生成的Configuration.cs
文件。不幸的是,您仍然需要重命名这些Configuration.cs
文件,否则会出现两个文件的问题。我将我的文件重命名为ConfigA.cs
和ConfigB.cs
编辑:(由Kevin McPheat提供)请记住,在重命名 Configuration.cs
文件时,也要重命名类名称和构造函数。/编辑
采用这种结构,您只需执行
PM> Add-Migration -ConfigurationTypeName ConfigA
PM> Add-Migration -ConfigurationTypeName ConfigB
这将在与配置文件相邻的文件夹内创建迁移的代码文件(这样做可以将这些文件保持在一起,非常不错)。
PM> Update-Database -ConfigurationTypeName ConfigA
PM> Update-Database -ConfigurationTypeName ConfigB
最后但同样重要的是,这两个命令将会把正确的迁移应用到它们对应的数据库。
编辑于2016年2月8日:
我已经试过 EF7 版本 7.0.0-rc1-16348
我无法让 -o|--outputDir 选项起作用。它一直在给出 Microsoft.Dnx.Runtime.Common.Commandline.CommandParsingException: Unrecognized command or argument
的错误信息。
然而,看起来第一次添加迁移时,它会被添加到 Migrations 文件夹中,之后为另一个上下文添加的迁移会自动放置在 Migrations 子文件夹中。
原始名称 ContextA
看起来违反了某些命名规范,所以我现在使用 ContextAContext
和 ContextBContext
。使用这些名称,您可以使用以下命令:
(注意我的 dnx 仍然可以从包管理器控制台工作,我不想打开单独的 CMD 窗口进行迁移)
PM> dnx ef migrations add Initial -c "ContextAContext"
PM> dnx ef migrations add Initial -c "ContextBContext"
这将在 Migrations
文件夹中为 ContextAContext
创建一个模型快照和初始迁移。它将为 ContextBContext
创建一个名为 ContextB
的文件夹,其中包含这些文件。
我手动添加了一个 ContextA
文件夹,并将迁移文件从 ContextAContext
移动到该文件夹中。然后我重命名了这些文件中的命名空间(快照文件、初始迁移以及注意初始迁移文件下还有第三个文件……designer.cs)。我需要向命名空间中添加 .ContextA
,然后框架再次自动处理它。
使用以下命令会为每个上下文创建一个新迁移:
PM> dnx ef migrations add Update1 -c "ContextAContext"
PM> dnx ef migrations add Update1 -c "ContextBContext"
生成的文件会被放置在正确的文件夹中。