更新到 Pomelo 5.0.3 后迁移中的排序错误

Wrong collation in Migrations after updating to Pomelo 5.0.3

我们已经从 Pomelo 5.0.0-alpha.2 更新到 5.0.3。使用外键创建新迁移时,我们现在面临一些问题:

migrationBuilder.AddColumn<Guid>(
                name: "UserId",
                table: "MyTable",
                type: "char(36)",
                nullable: true,
                collation: "ascii_general_ci");

这是我们的实体配置:

public class MyTableEntityConfiguration : 
{
    public override void Configure(EntityTypeBuilder<MyTableEntity> builder)
    {
        base.Configure(builder);

        builder.HasOne(x=> x.User)
            .WithMany()
            .HasForeignKey(x=> x.UserId)
            .HasPrincipalKey(user => user.Id);
    }
}

我们的实体:

public class MyTable
{
        public Guid? UserId { get; set; }
        public UserEntity User { get; set; }
}

现在添加了错误的排序规则(“ascii_general_ci”),导致迁移在执行时失败:

执行 DbCommand 失败(5 毫秒)[Parameters=[],CommandType='Text',CommandTimeout='30'] 更改 TABLE MyTable 添加约束 FK_MyTable_Users_UserId 外键 (UserId) 引用 Users (Id) 删除限制;

到目前为止我们找到的唯一解决方案是在迁移中删除“collat​​ion:”ascii_general_ci”。是否有更好的解决方案来不添加排序规则(或只添加正确的排序规则)自动迁移?我们的数据库设置为使用“默认字符集”。

正如 bricelam 所提到的,它是 Pomelo 提供商中的一个 issue/change,并且已经在他们的 github https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1477 中报告过。从 5.0.3 版本开始,您可以将以下内容添加到您的 DbContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.UseGuidCollation(string.Empty);
}

这将告诉提供商不要向新的迁移脚本添加默认排序规则。