更新到 Pomelo 5.0.3 后,Migrations 中的排序错误

Posted

技术标签:

【中文标题】更新到 Pomelo 5.0.3 后,Migrations 中的排序错误【英文标题】:Wrong collation in Migrations after updating to Pomelo 5.0.3 【发布时间】:2022-01-01 01:31:16 【问题描述】:

我们已从 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 失败 (5ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] 更改表 MyTable 添加约束 FK_MyTable_Users_UserId 外键 (UserId) 引用 Users (Id) 删除限制;

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

【问题讨论】:

看起来像 Pomelo 提供程序中的错误。在他们的仓库中提交a new issue。 【参考方案1】:

正如 bricelam 所提到的,这是 Pomelo 提供商的一个问题/更改,并且已经在他们的 github https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.mysql/issues/1477 中进行了报告。从 5.0.3 版开始,您可以将以下内容添加到您的 DbContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)

    modelBuilder.UseGuidCollation(string.Empty);

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

【讨论】:

以上是关于更新到 Pomelo 5.0.3 后,Migrations 中的排序错误的主要内容,如果未能解决你的问题,请参考以下文章

工具和库的使用--pomelo-sync

vscode调试pomelo和pomelo使用vscode调试

pomelo 安装 windows 下

pomelo源码解析--新建项目(cli工具: pomelo)

pomelo源码解析--新建项目(cli工具: pomelo)

pomelo源码解析--新建项目(cli工具: pomelo)