📖

EF Core で MySQL の UUID_TO_BIN, BIN_TO_UUID と同じフォーマットにするメモ

2024/04/04に公開

EF Core のデフォルトの GuidToBytesConverter はリトルエンディアンなので MySQL の UUID_TO_BIN 及び BIN_TO_UUID とフォーマットが一致しない。
ref: https://bugs.mysql.com/bug.php?id=105142

なので以下の様な ValueConverter 作ってフォーマット合わせるようにする

public class MySqlUuidConverter: ValueConverter<Guid, byte[]>
{
    public MySqlUuidConverter() : base(
        v => v.ToByteArray(true),
        v => new Guid(v, true)
    ) { }
}

使い方

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Hoge>(entity => {
        entity.Property(e => e.HogeId)
            .HasConversion<MySqlUuidConverter>();
    });
}

ref: https://learn.microsoft.com/ja-jp/ef/core/modeling/value-conversions

Discussion