tentrun
@tentrun
Clown c# inside

Как разобрать JSON модель из БД?

Есть вот такая моделька
Моделька
public class ServiceSettingEntity
{
    /// <summary>
    /// Уникальный ключ в БД
    /// </summary>
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int? Id { get; set; }
    
    /// <summary>
    /// Наименование сервиса
    /// </summary>
    public string ServiceName { get; set; }
    
    /// <summary>
    /// Настройки сервиса
    /// </summary>
    public JsonServiceSettings Settings { get; set; }
}

/// <summary>
/// Настройки определенного сервиса
/// </summary>
public class JsonServiceSettings
{
    /// <summary>
    /// Метод сервиса
    /// </summary>
    public string Method { get; set; }
    
    /// <summary>
    /// Версия настроек сервиса
    /// </summary>
    public string Version { get; set; }
    
    /// <summary>
    /// Коллекция настроек сервиса
    /// </summary>
    public List<InternalServiceSettings> Settings { get; set; }
}

/// <summary>
/// Внутренняя сущность настройки сервиса
/// </summary>
public class InternalServiceSettings
{
    /// <summary>
    /// Наименование настройки
    /// </summary>
    public string Name { get; set; }
    
    /// <summary>
    /// Значение настройки
    /// </summary>
    public string? Value { get; set; }
    
    /// <summary>
    /// Стандартное значение настройки
    /// </summary>
    public string DefaultValue { get; set; }
    
    /// <summary>
    /// Обязательна ли настройка
    /// </summary>
    public bool Required { get; set; }
    
    /// <summary>
    /// Описание настройки
    /// </summary>
    public string? Description { get; set; }
}


Храним JsonServiceSettings в JSON формате
Скрин из БД
657705de52f14011015955.png


Упаковываю ее вот так через modelBuilder
spoiler

modelBuilder
            .Entity<ServiceSettingEntity>()
            .OwnsOne(sett => sett.Settings, builder =>
            {
                builder.OwnsMany(x => x.Settings, build => build.ToJson());
                builder.ToJson();
            });


Она спокойно уходит в БД, но, если пробовать ее получить, то, получаем
Microsoft.Data.SqlClient.SqlException (0x80131904): JSON_QUERY не является известным имя встроенной функции.

Весь интернет перерыл, ничего не нашел.
пробовал вот так
spoiler

modelBuilder
            .Entity<ServiceSettingEntity>()
            .OwnsOne(sett => sett.Settings, builder =>
            {
                builder.OwnsMany(sett => sett.Settings,
                    builder => builder.Property(x => x)
                        .HasConversion((x) => JsonConvert.SerializeObject(x),
                            str => JsonConvert.DeserializeObject<InternalServiceSettings>(str)));
            });

Но, не помогло. В чем проблема?

upd: MsSQL - DB
EF Core 7 - ORM
Необходимо получать как единую заполненную модель.
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
tentrun
@tentrun Автор вопроса
Clown c# inside
Решение найдено - проблема в БД, версия бд <2016 13.0, в нашей БД отсутствует Json_Query
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы