值转换器

值转换器

值转换器允许在读取或写入数据库时转换属性值。此转换可以是同一类型的另一个值(例如,加密字符串)或从一种类型的值转换为另一种类型的值(例如,在数据库中将枚举值与字符串相互转换)。

配置值转换器

值转换是在 DbContextOnModelCreating 中的属性上定义的。例如,假设枚举和实体类型定义为:

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)

当多个属性使用相同的转换时,这可能很有用。

发表回复

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