Dynamic JSONB в PostgreSQL с EF CoreC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Dynamic JSONB в PostgreSQL с EF Core

Сообщение Anonymous »

Я строю приложение агрегатора в ядре .NET с использованием C# и Entity Framework Core, который объединяет пользовательские данные из различных служб.

Код: Выделить всё

ServiceEvent
), наряду со стандартными столбцами, у нас есть столбец JSONB (

Код: Выделить всё

EventData
), который хранит информацию о специфике для обслуживания. Каждая строка представляет пользователя и экземпляр службы; Тем не менее, каждая служба имеет особую структуру JSON (которую мы знаем заранее).
Когда служба запускает веб -крюк (например, в создании деятельности), соответствующее событие вставлено/обновляется в эту таблицу.

Код: Выделить всё

public class ServiceEvent : EntityBaseGuidConcurrency
{
public string EmployeeId { get; set; }
public ServiceNames ServiceName { get; set; }
public DateTime CreationTs { get; set; }
public DateTime EndTs { get; set; }
public EventStatus Status { get; set; }
public double? Price { get; set; }
public JsonDocument EventData { get; set; }

#region Navigation Properties
public virtual Employee Employee { get; set; }
#endregion
}
Я изучаю стратегии для обработки данных JSONB без схемы в сфере обслуживания (необходимо упомянуть, что ядро ​​EF довольно новое для меня).
Вот подходы, которые я рассматриваю:

[*] Использование кода> код jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument> jocument rase jocul Используйте API JSON (например, RootElement и GetProperty ) для доступа и обновления данных
Downsides: поскольку jsondocument неизменен, я должен преобразовать ее в изменяющуюся структуру (например, jsonnode ), чтобы обновить Fields. POCOS и сопоставление уровня: поддерживать хранилище JSON как JSondocument , но создайте картирующий слой, который, основываясь на ServicEName , Deserialize EventData в соответствующем сильно напечатанном POCO (например, ActivityEventData для действий). />
Использование необработанного JSON с [notmapped] аннотации: храните RAW JSON в качестве строки (но все еще сопоставлен с столбцом JSONB) и выставьте компьютерные свойства (например, ActivityData или carpoolingdata ), которые Deserialize json, основанные на обращении, . /> < /li>
< /ol>

Код: Выделить всё

public class ServiceEvent : EntityBaseGuidConcurrency
{
public string EmployeeId { get; set; }
public ServiceNames ServiceName { get; set; }
public DateTime CreationTs { get; set; }
public DateTime EndTs { get; set; }
public EventStatus Status { get; set; }
public double? Price { get; set; }
public string EventDataJson { get; set; }

[NotMapped]
public ActivityEventData ActivityData
{
get => ServiceName == ServiceNames.activity ?
JsonSerializer.Deserialize(EventDataJson) : null;
set => EventDataJson = JsonSerializer.Serialize(value);
}

[NotMapped]
public CarpoolingEventData CarpoolingData
{
get => ServiceName == ServiceNames.carpooling ?
JsonSerializer.Deserialize(EventDataJson) : null;
set => EventDataJson = JsonSerializer.Serialize(value);
}

#region Navigation Properties
public virtual Employee Employee { get; set; }
#endregion
}
Обратите внимание здесь, что Activity и Carpooling являются примерами у нас примеров.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... th-ef-core
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Dynamic JSONB в PostgreSQL с EF Core
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Ошибка: TypeError: экземпляр «JSArray<dynamic>»: тип «List<dynamic>» не является подтипом типа «Map<List<dynamic>, Dynam
    Anonymous » » в форуме Android
    0 Ответы
    47 Просмотры
    Последнее сообщение Anonymous
  • Jsonb.fromJson не десериализует набор, созданный из строки JSON, созданной Jsonb.toJson(objectWithSet).
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Jsonb.fromJson не десериализует набор, созданный из строки JSON, созданной Jsonb.toJson(objectWithSet).
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • ASP.NET Core 8 Web API/C#/Dapper/Postgresql Сохранение и обслуживание столбца JSONB, не касаясь столбца
    Anonymous » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»