预定义的值转换器
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 中进行任何进一步的配置。
Previous: 值转换器
Next: 无键实体类型查询数据库视图