值转换器
值转换器允许在读取或写入数据库时转换属性值。此转换可以是同一类型的另一个值(例如,加密字符串)或从一种类型的值转换为另一种类型的值(例如,在数据库中将枚举值与字符串相互转换)。
配置值转换器
值转换是在 DbContext 的 OnModelCreating 中的属性上定义的。例如,假设枚举和实体类型定义为:
public class Rider
{
public int Id { get; set; }
public EquineBeast Mount { get; set; }
}
public enum EquineBeast
{
Donkey,
Mule,
Horse,
Unicorn
}Code language: JavaScript (javascript)
然后,可以在 OnModelCreating 中定义转换,以将枚举值存储为数据库中的字符串(例如,”Donkey”、”Mule” 和 …):
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(
v => v.ToString(),
v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));
}Code language: JavaScript (javascript)
ValueConverter 类
如上所述调用 HasConversion 将创建一个 ValueConverter 实例,并在属性上对其进行设置。可以改为显式创建 ValueConverter。例如:
var converter = new ValueConverter<EquineBeast, string>(
v => v.ToString(),
v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));
modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(converter);Code language: JavaScript (javascript)
当多个属性使用相同的转换时,这可能很有用。