更新到 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 中的排序错误的主要内容,如果未能解决你的问题,请参考以下文章
vscode调试pomelo和pomelo使用vscode调试
pomelo源码解析--新建项目(cli工具: pomelo)