web-dev-qa-db-fra.com

EF Core 2.0 Enums stockés sous forme de chaîne

J'ai pu stocker une énumération sous forme de chaîne dans la base de données.

builder.Entity<Company>(eb =>
{
    eb.Property(b => b.Stage).HasColumnType("varchar(20)");
});

Mais quand vient le temps d'interroger EF, il ne sait pas analyser la chaîne dans une énumération. Comment puis-je interroger comme ça:

context
    .Company
        .Where(x => x.Stage == stage)

Il s'agit de l'exception: la conversion a échoué lors de la conversion de la valeur varchar "Opportunité" en type de données int

15
Brad Firesheets

La fonctionnalité de conversion de valeur est nouvelle dans EF Core 2.1.

Les convertisseurs de valeurs permettent de convertir les valeurs des propriétés lors de la lecture ou de l'écriture dans la base de données. Cette conversion peut être d'une valeur à une autre du même type (par exemple, le cryptage de chaînes) ou d'une valeur d'un type à une valeur d'un autre type (par exemple, la conversion de valeurs enum vers et à partir de chaînes dans la base de données.)

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

public enum EquineBeast
{
    Donkey,
    Mule,
    Horse,
    Unicorn
}

Vous pouvez utiliser votre propre conversion

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

ou convertisseur intégré

var converter = new EnumToStringConverter<EquineBeast>();

modelBuilder
    .Entity<Rider>()
    .Property(e => e.Mount)
    .HasConversion(converter);
26
szydzik

Il s'agit de la même question que celle à laquelle vous avez répondu: EF7 prend-il en charge les énumérations?

2
schnitty