48

默认情况下,add-migration 命令会尝试在

  • 项目根
    • 迁移

我想将我的迁移与其他与 EF 相关的代码一起存储在项目的 \Data 文件夹中:

  • 项目根
    • 数据
      • 迁移

有了这个结构,当我执行

PM> add-migration Migration1

在 NuGet 控制台中,我收到以下错误:

    System.IO.DirectoryNotFoundException:找不到路径“C:\MyProjectRoot\Migrations\201112171635110_Migration1.cs”的一部分。
   在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径)
   在 System.IO.FileStream.Init(字符串路径、FileMode 模式、FileAccess 访问、Int32 权限、Boolean useRights、FileShare 共享、Int32 bufferSize、FileOptions 选项、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath)
   在 System.IO.FileStream..ctor(字符串路径、FileMode 模式、FileAccess 访问、FileShare 共享、Int32 bufferSize、FileOptions 选项)
   在 System.IO.StreamWriter.CreateFile(字符串路径,布尔附加)
   在 System.IO.StreamWriter..ctor(字符串路径,布尔附加,编码编码,Int32 缓冲区大小)
   在 System.IO.StreamWriter..ctor(字符串路径,布尔附加,编码编码)
   在 System.IO.File.InternalWriteAllText(字符串路径,字符串内容,编码编码)
   在 System.IO.File.WriteAllText(字符串路径,字符串内容)

是否可以在执行 add-migration 命令时指定应在磁盘上创建迁移文件的位置?

4

2 回答 2

68

在配置类构造函数中添加这一行:

this.MigrationsDirectory = "DirOne\\DirTwo";

命名空间将继续设置为配置类本身的命名空间。要更改这一点,请添加此行(也在配置构造函数中):

this.MigrationsNamespace = "MyApp.DirOne.DirTwo";
于 2012-05-31T02:25:43.607 回答
21

enable-migrations在调用命令(创建Configuration类)期间也可以使用-MigrationsDirectory参数指定迁移文件夹:

enable-migrations -EnableAutomaticMigration:$false -MigrationsDirectory Migrations\CustomerDatabases -ContextTypeName FullyQualifiedContextName

该示例将创建一个Configuration类,该类将MigrationsDirectory'Migrations\CustomerDatabases' 设置为相对于项目根文件夹的指定文件夹。

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    MigrationsDirectory = @"Migrations\CustomerDatabases";
}


另请参阅这篇文章,该文章解释了具有多个上下文和迁移文件夹的项目。

顺便说一句,如果您使用多个迁移文件夹和多个上下文,请考虑在您的派生类(Fluent-API 配置所在的位置)的OnModelCreating方法中为默认模式设置一个名称。DbContext这将在 EF6 中工作:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("CustomerDatabases");
    }

将为您的数据库表添加模式名称的前缀。这将使您能够在一个数据库中使用多个上下文,其中您有几组独立于另一个的表。(这也将创建 MigrationHistory 表的单独版本,在上面的示例中是CustomerDatabases.__MigrationHistory)。

于 2015-08-26T13:09:41.433 回答