Как я могу пакетно обновить поле jsonb, используя библиотеку Entity Framework Extensions? - PullRequest
0 голосов
/ 26 июня 2019

Я использую PostgreSQL с EntityFrameworkCore. Мне нужно обновить поле jsonb. Пакеты Z.EntityFramework выглядят многообещающе, но ни один из них мне не подходит.

Я устанавливаю поле jsonb с EntityTypeBuilder:

builder.Property(o => o.Description).HasColumnType(NpgsqlDbType.Jsonb);

и с атрибутом Column:

[Column(TypeName = "jsonb")]
public string Description {get; set;}

Хорошо работает с обычной практикой обновления. Однако, когда я пытаюсь пакетное обновление поля, используя следующие пакеты:

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

Используя следующий код:

 dbContext.AgeBuckets
.Where(o => o.PropertyId == scope.PropertyId)
.UpdateFromQuery(o => //for EF-Plus a method Update()
    new AgeBucket
    {
        Description = serializedDescription //jsonb
    });

Никто из них не работает для меня. Я получаю следующие исключения: Для EF-Plus:

Npgsql.PostgresException : 42804: column "Description" is of type jsonb but expression is of type text

Для EF-Classic и EF-Extensions:

System.Exception : Could not find the context from the IQueryable expression. Are you sure this is coming from an Entity Framework Context?

Я что-то не так делаю?

1 Ответ

1 голос
/ 03 июля 2019

Отказ от ответственности : Я владелец Расширения Entity Framework

Начиная с v2.6.2 (для расширений Entity Framework), типы json и jsonb теперь поддерживаются для Batch Update

...