EF Core: How can I register multiple value conversions?

Viewed 788

The following are valid ways to register value conversions (snippets taken from here):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Rider>()
        .Property(e => e.Mount)
        .HasConversion(
            v => v.ToString(),
            v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));
}

and

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    var converter = new ValueConverter<EquineBeast, string>(
        v => v.ToString(),
        v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));

    modelBuilder
        .Entity<Rider>()
        .Property(e => e.SecondaryMount)
        .HasConversion(converter);
}

My Question:

  • If I'd like to register multiple value conversions on the same type (just like the snippets above) how can I accomplish that in the same line?

For example, I'd expect the following to work, but it doesn't.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    var converter = new ValueConverter<EquineBeast, string>(
        v => v.ToString(),
        v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));

    modelBuilder
        .Entity<Rider>()
        .Property(e => e.Mount)
        .HasConversion(
            v => v.ToString(),
            v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v))
        .Property(e => e.SecondaryMount) // doesn't work; can't append another property registration
        .HasConversion(converter);
}
1 Answers

I am pretty sure each property is one statement, such as the below.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    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);
    modelBuilder
        .Entity<Rider>()
        .Property(e => e.SecondaryMount)
        .HasConversion(converter);

}
Related