预定义的值转换器

预定义的值转换器

EF Core 附带一组预定义的 ValueConverter 类,这些类在 Microsoft.EntityFrameworkCore.Storage.ValueConversion 命名空间中找到。这些是:

  • BoolToZeroOneConverter — 布尔值到零和一
  • BoolToStringConverter — 布尔值到字符串(如 “Y” 和 “N”)
  • BoolToTwoValuesConverter — 布尔值为任意两个值
  • BytesToStringConverter — 字节数组到 Base64 编码的字符串
  • CastingConverter — 只需要类型强制转换的转换
  • CharToStringConverter — Char 到单字符字符串
  • DateTimeOffsetToBinaryConverter — DateTimeOffset 到二进制编码的64位值
  • DateTimeOffsetToBytesConverter — DateTimeOffset 到字节数组
  • DateTimeOffsetToStringConverter — DateTimeOffset 到字符串
  • DateTimeToBinaryConverter — DateTime 到64位值(包括 DateTimeKind.Utc)
  • DateTimeToStringConverter — DateTime 到字符串
  • DateTimeToTicksConverter — DateTime 到计时周期
  • EnumToNumberConverter — 枚举到基础数字
  • EnumToStringConverter — 枚举到字符串
  • GuidToBytesConverter — Guid 到字节数组
  • GuidToStringConverter — Guid 到字符串
  • NumberToBytesConverter — 任何数值到字节数组
  • NumberToStringConverter — 字符串的任何数值
  • StringToBytesConverter — 字符串到 UTF8 字节
  • TimeSpanToStringConverter — TimeSpan 到字符串
  • TimeSpanToTicksConverter — TimeSpan 到计时周期

请注意,EnumToStringConverter 包含在此列表中。这意味着无需显式指定转换,如上所示。相反,只需使用内置转换器:

var converter = new EnumToStringConverter<EquineBeast>();

modelBuilder
    .Entity<Rider>()
    .Property(e => e.Mount)
    .HasConversion(converter);Code language: JavaScript (javascript)

预定义的转换

对于内置转换器存在的常见转换,无需显式指定转换器。相反,只需配置应使用的提供程序类型,EF 会自动使用适当的内置转换器。枚举到字符串的转换用作上面的示例,但如果配置了提供程序类型,则 EF 实际上会自动执行此操作:

modelBuilder
    .Entity<Rider>()
    .Property(e => e.Mount)
    .HasConversion<string>();Code language: HTML, XML (xml)

可以通过显式指定列类型来实现相同的目的。例如,如果定义了实体类型,如下所示:

public class Rider
{
    public int Id { get; set; }

    [Column(TypeName = "nvarchar(24)")]
    public EquineBeast Mount { get; set; }
}Code language: JavaScript (javascript)

然后,枚举值将以字符串形式保存在数据库中,而无需在 OnModelCreating 中进行任何进一步的配置。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注