Using HasData to seed an Entity with a mapped Enum creates a migration that errors with: PostgresException (0x80004005) 42703: column "{{enum value}}"
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Start by reproducing the reported case: map the PostgreSQL enum and seed the entity with HasData, then generate and run the initial migration. Inspect the generated InsertData values for the enum. The issue is resolved when the migration runs successfully without treating the enum value as a column name.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hi,
I think this is a minor bug on migration code generation, and while I found a work around, I thought I'd contribute my findings. I searched issues and didn't see anyone mention this yet.
Consider the below setup where Voice is an Entity model, and it has a reference to an enumeration, VoiceSource
An enumeration with Npgsql mapping added
public enum VoiceSource
{
Recording = 0,
Azure = 1,
}
opt.UseNpgsql(
builder.Configuration.GetConnectionString("ZabaanDbContext"),
o =>
{
o.MapEnum<VoiceSource>(nameof(VoiceSource));
o.UseNodaTime();
}
);
I have some seed data configured:
public static readonly Voice Voices_AzureFarid = new Voice
{
Id = VoiceId.AzureFarid, // vogen wrapped urn
Source = VoiceSource.Azure,
SourceIdentifier = "fa-IR-FaridNeural",
Name = "Farid",
};
public static readonly Voice Voices_AzureDilara = new Voice
{
Id = VoiceId.AzureDilara, // vogen wrapped urn
Source = VoiceSource.Azure,
SourceIdentifier = "fa-IR-DilaraNeural",
Name = "Dilara",
};
modelBuilder.Entity<Voice>(voice =>
{
voice.HasIndex(e => new { e.Source, SourceIdentifer = e.SourceIdentifier }).IsUnique();
voice.HasIndex(e => e.Name).IsUnique();
voice.HasData(Voices_AzureFarid, Voices_AzureDilara);
});
Then, when I make my INITIAL database migration, this code is generated where the enumeration is referenced directly:
migrationBuilder.InsertData(
table: "Voices",
columns: new[] { "Id", "Name", "Source", "SourceIdentifier" },
values: new object[,]
{
{ "urn:zabaan:voice:0a57108b-18d7-4877-ac09-67d73150da08", "Dilara", VoiceSource.Azure, "fa-IR-DilaraNeural" },
{ "urn:zabaan:voice:d0d96aa5-971b-4d78-a606-471469663c34", "Farid", VoiceSource.Azure, "fa-IR-FaridNeural" }
});
Which fails to run via the migration bundle application:
INSERT INTO "Voices" ("Id", "Name", "Source", "SourceIdentifer")
VALUES ('urn:zabaan:voice:d0d96aa5-971b-4d78-a606-471469663c34', 'Farid', Azure, 'fa-IR-FaridNeural');
Npgsql.PostgresException (0x80004005): 42703: column "azure" does not exist
The fix
Updating the migration file manually to use the string value wrapped with single quotes fixed the issue and the migration succeeds:
migrationBuilder.InsertData(
table: "Voices",
columns: new[] { "Id", "Name", "Source", "SourceIdentifier" },
values: new object[,]
{
{ "urn:zabaan:voice:0a57108b-18d7-4877-ac09-67d73150da08", "Dilara", "\'azure\'", "fa-IR-DilaraNeural" },
{ "urn:zabaan:voice:d0d96aa5-971b-4d78-a606-471469663c34", "Farid", "\'azure\'" , "fa-IR-FaridNeural" }
});
The single quotes wrapping the "azure" are necessary FYI, I first tried it without and that also failed.
Failed executing DbCommand (56ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO "Voices" ("Id", "Name", "Source", "SourceIdentifer")
VALUES ('urn:zabaan:voice:0a57108b-18d7-4877-ac09-67d73150da04', 'Dilara', azure, 'fa-IR-DilaraNeural');
INSERT INTO "Voices" ("Id", "Name", "Source", "SourceIdentifer")
VALUES ('urn:zabaan:voice:d0d96aa5-971b-4d78-a606-471469663c38', 'Farid', azure, 'fa-IR-FaridNeural');
Npgsql.PostgresException (0x80004005): 42703: column "azure" does not exist
- Lenguaje dominante
- C#
- Estrellas
- 1.8k
- Forks
- 268
- Merge medio
- 2 h 35 min
- PR fusionados (30 d)
- 136
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de npgsql/efcore.pg
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
NTS: the M ordinate is dropped from geometry SQL literals and from geometries stored in JSONPosiblemente ocupada @Ahmed7991 la tomó hace 5 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
npgsql/efcore.pg#4093 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
`TimeSpan`/`Duration` component members: negative values are floored, and intervals computed in SQL are read field by fieldPosiblemente ocupada @jeremy-morren la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Numeric storage parameters are formatted with the current culture, so migrations emit 0,01 instead of 0.01Posiblemente ocupada @Sorbitol la tomó hace 12 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 30/100
Los mantenedores suelen responder en 1 día
-
`Contains` on a JSON primitive collection compares JSON text, so `DateTime` and `TimeOnly` items never matchPosiblemente ocupada @Mr444-dev la tomó hace 7 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
npgsql/efcore.pg#4099 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de npgsql/efcore.pg
Issues similares
-
Issue-Bug Needs-Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
JiaFeiMiao-K-Cat/DiscImageStudio#281 ·
Los mantenedores suelen responder en 1 día
-
area/access-management Frontend onboarding candidate :handshake:
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Altinn/altinn-auth#4941 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
aws/aws-sdk-net#4586 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Kryptos-FR/MarkView.Avalonia#269 · 1 reacción ·
Los mantenedores suelen responder en 1 día