Код: Выделить всё
ServiceEvent
Код: Выделить всё
EventData
Когда служба запускает веб -крюк (например, в создании деятельности), соответствующее событие вставлено/обновляется в эту таблицу.
Код: Выделить всё
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
}
Вот подходы, которые я рассматриваю:
[*] Использование кода> код 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
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... th-ef-core