【问题标题】:EF Core Multiple migration setsEF Core 多迁移集
【发布时间】:2017-03-17 01:01:21
【问题描述】:

我目前正在使用 EF Core Code First 迁移开发 .Net Core 应用程序。我在 Windows 和 OS X 之间跳来跳去进行我的开发(Windows 在家里,Mac 在旅途中),我试图弄清楚当我在 Windows 上时如何使用 SQL Server 的数据库迁移和在我的 SQLite 上马克。

是否可以维护两组迁移并选择应用哪一组(无需单独指定每个迁移)?或者我是否需要创建单独的 .Net Core 应用程序/程序集并为 dotnet ef database update 命令指定 --assembly 选项?

【问题讨论】:

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


    【解决方案1】:

    你有两个选择:

    1. 使用两组迁移
    2. 手动将迁移编辑为与提供商无关

    多组

    每个集合都需要在自己的程序集中。首先,生成第一个迁移并将其移动到一个新项目中。您将在配置提供程序时配置迁移程序集。

    optionsBuilder.UseSqlServer(
        mssqlConnectionString
        , x => x.MigrationsAssembly("MyApp.Migrations.SqlServer"));
    //optionsBuilder.UseSqlite(
    //    sqliteConnectionString,
    //    x => x.MigrationsAssembly("MyApp.Migrations.Sqlite"));
    

    我有 a sample 将迁移放在他们自己的程序集中,您可能还想将其用作参考。

    与提供者无关

    要使迁移与提供者无关,请合并每个提供者将生成的内容。例如,下面的注释同时适用于 SQL Server 和 SQLite。

    migrationBuilder.CreateTable(
        name: "People",
        columns: table => new
        {
            Id = table.Column<int>(nullable: false)
                .Annotation("Sqlite:Autoincrement", true)
                .Annotation("SqlServer:ValueGenerationStrategy",
                    SqlServerValueGenerationStrategy.IdentityColumn)
        },
        constraints: table =>
        {
            table.PrimaryKey("PK_People", x => x.Id);
        });
    

    【讨论】:

    • 这非常有用!听起来,无论哪种方式,都会进行某种类型的手动编辑?无论是将迁移迁移到另一个程序集,还是直接将所需的数据添加到迁移中;对吗?
    • 是的。我们已经尝试过添加一流的支持以支持将迁移与多提供商模型一起使用(请参阅#1825),但成本非常高。目前,我们只是努力让您手动完成。
    • 当我运行dotnet ef migrations add Sample --project ..\MyApp.Migrations 时,我得到Unrecognized option --project。还注意到 Github 上的 this。这是否会使示例 repo 过时,因为它被标记为“closed-wont-fix”?
    • @Bwolfing GitHub 问题无关(与--project-dir 有关)。确保您使用的是 1.0.0 或 1.1.0 RTM 包。看看--help 是否有效。
    • 能够通过将工具更改为 1.0.0(按照建议)并从 project.json 升级到 .Net Core 1.1 的 .csproj 格式来解决此问题
    猜你喜欢
    • 2021-11-23
    • 2022-11-11
    • 2019-08-03
    • 2021-03-21
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多