J'utilise PostgreSQL avec EntityFrameworkCore. J'ai besoin de mettre à jour le champ jsonb
par lots. Les packages Z.EntityFramework semblent prometteurs, mais aucun d'entre eux ne fonctionne pour moi.
J'ai configuré le champ jsonb avec EntityTypeBuilder:
builder.Property(o => o.Description).HasColumnType(NpgsqlDbType.Jsonb);
et avec ColumnAttribute:
[Column(TypeName = "jsonb")]
public string Description {get; set;}
Cela fonctionne bien avec une pratique de mise à jour régulière. Cependant, lorsque j'essaie de mettre à jour le champ par lots à l'aide des packages suivants:
Install-Package Z.EntityFramework.Extensions.EFCore -Version 2.6.0
Install-Package Z.EntityFramework.Plus.EFCore -Version 2.0.2
Install-Package Z.EntityFramework.Classic -Version 7.1.9
Utilisation du code suivant:
dbContext.AgeBuckets
.Where(o => o.PropertyId == scope.PropertyId)
.UpdateFromQuery(o => //for EF-Plus a method Update()
new AgeBucket
{
Description = serializedDescription //jsonb
});
Aucun d'entre eux ne travaille pour moi. Je reçois les prochaines exceptions: Pour EF-Plus:
Npgsql.PostgresException : 42804: column "Description" is of type jsonb but expression is of type text
Pour EF-Classic et EF-Extensions:
System.Exception : Could not find the context from the IQueryable expression. Are you sure this is coming from an Entity Framework Context?
Est-ce que je fais quelque chose de mal?
Clause de non - responsabilité : je suis le propriétaire des extensions Entity Framework
À partir de la version 2.6.2 (pour les extensions Entity Framework), les types json
et jsonb
sont désormais pris en charge pour la Batch Update
par Batch Update