更新到 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
) 删除限制;
到目前为止我们找到的唯一解决方案是在迁移中删除“collation:”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);
}
这将告诉提供商不要向新的迁移脚本添加默认排序规则。
我们已经从 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
) 删除限制;
到目前为止我们找到的唯一解决方案是在迁移中删除“collation:”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);
}
这将告诉提供商不要向新的迁移脚本添加默认排序规则。