Failed to save string value to PostgreSQL enum column

Ouverte
#3,529 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
25/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
csharp, postgresql
Domaine
databases

Piste de recherche

Start by checking how EF Core value conversions interact with Npgsql's PostgreSQL enum mapping; the report provides a converter, model configuration, SQL schema, and exception, but names no repository files or tests. Reproduce the save failure with the provided setup, then look for relevant provider tests or documentation. Done means establishing whether this configuration can save the value and documenting or fixing the behavior.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

I have C# value object together with convert like this:

public record DomainType
{
    public string Value { get; }

    public static readonly DomainType DomainTypeValue1 = new("DomainTypeValue1");
    public static readonly DomainType DomainTypeValue2 = new("DomainTypeValue2");
    public static readonly DomainType DomainTypeValue3 = new("DomainTypeValue3");

    private DomainType(string value)
    {
        Value = value;
    }

    public static DomainType From(string value)
    {
        return new DomainType(value);       
    }
    public override string ToString()
    {
        return Value;
    }
}

public class DomainTypeConverter() : ValueConverter<DomainType, string>(v => v.Value,  v => DomainType.From(v));

I use this type in the entity:

[EntityTypeConfiguration<DomainEntityModelBuilder, DomainEntity>]
[Table("domain_entity", Schema = "my_schema")]
public class DomainEntity
{
    public required Guid Id { get; init; }  

    public required DomainType EntityType { get; init; }
}

Model builder looks like this:

public class DomainEntityModelBuilder : IEntityTypeConfiguration<DomainEntity>
{
    public void Configure(EntityTypeBuilder<DomainEntity> entity)
    {
        entity.Property(d => d.Id).ValueGeneratedNever();

        entity
            .Property(d => d.EntityType )
            .HasColumnName("entity_type")
            .HasConversion<DomainTypeConverter>()
            .HasColumnType("my_schema.domain_type");
    }
}

Sql to create enum and type looks like this:

CREATE TYPE my_schema.domain_type AS ENUM ('DomainTypeValue1', 'DomainTypeValue2', 'DomainTypeValue3');

CREATE TABLE my_schema.domain_entity
(
    id                           UUID PRIMARY KEY NOT NULL,    
    entity_type            my_schema.domain_type     NOT NULL
)

When I tried to save DomainEntity I get error:

Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
---> Npgsql.PostgresException (0x80004005): 42804: column "entity_type" is of type my_schema.domain_type but expression is of type text

Is it possible to save text value as a postgres enum type?

Langage dominant
C#
Étoiles
1.8k
Forks
268
Merge moyen
2 h 35 min
PR mergées (30 j)
136

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de npgsql/efcore.pg

Toutes les issues de npgsql/efcore.pg

Issues similaires

Plus d'issues C#

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.