PostgreSQL EF Core의 Json 처리
14017 단어 JSONC#EntityFrameworkPostgreSQL
컨디션
전제 조건
PostgresSQL의 Entry Framework Core에서 JSON 사용
A의 문자열로 처리된 것은 JSON에 대한 직렬화와 역직렬화입니다.다른 두 가지와 비교하면 이것은 제한된 방법이다.
장점과 단점
다음은 실제 A와 B를 실시함으로써 얻은 지식이다.
A의 방법
스스로 직렬화, 역직렬화가 필요하다.EF에서는 Load Context 시 역직렬화하고 Save 이전에 직렬화하면 됩니다.(기타 처리로 정시, get 속성시, set에서도 가능)
double.NaN, double.PositiveInfinity, double.NegativeInfinity
는 System.Text.Json(Microsoft)
를 제이슨으로 처리할 수 있다.그러나 브러쉬 등
System.Text.Json
도 처리할 수 없는 유형이 있어 문자열 등으로 처리해야 한다.context.SaveChanges
는 작용하지 않는다.약간의 처리가 필요하다.IsModified
를 진짜로 한다.context.Entry(groupB).Property(e => e.CustomerJsonb).IsModified = true;
ValueComparer
기능 예 2 Change Trackerdobule.NaN
등은 이렇게 처리할 수 없다(현재 단계에서).문자열로 처리하면 됩니다.A와 B 모두 Json 처리 유형으로 사용할 수 없으며 문자열로 저장할 수 있습니다.
예: Brush
더블의 무한대, 비수를 Json용 문자열의 예로 삼다
System.Text.Json(Microsoft)
를 이용하면 무한대, 비수를 Json으로 만들 수 있기 때문에 필요 없다.Number
.사용NumberS
Json. private double _number;
[JsonIgnore]
public double Number
{
get { return _number; }
set
{
_number = value;
_numberS = value.ToString();
}
}
private string? _numberS;
public string? NumberS
{
get { return _numberS; }
set
{
_numberS = value;
_number = double.Parse(value);
}
}
Json용 문자열의 예로 Brush 사용SolidColorBrush
만 대상입니다. private Brush? _color;
[JsonIgnore]
public Brush? Color
{
get { return _color; }
set
{
_color = value;
_colorS = value?.ToString(); // → value is null ? null : value.ToString();
}
}
private string? _colorS;
public string? ColorS
{
get { return _colorS; }
set
{
_colorS = value;
_color = Utils.GetBrushFromString(value);
}
}
데이터 기반 Json에 B로 저장된 예PostgreSQL의
jsonb
와 json
는 조금 다르다.다만,'\u221E'는'∞'라는 점은 다르게 표현한 것일 뿐이다.B 메서드의 Enity 전체
public class GroupB
{
public int Id { get; set; }
[Column(TypeName = "jsonb")]
public CustomerB? CustomerJsonb { get; set; } //Jsonbで保存
[Column(TypeName = "json")]
public CustomerB? CustomerJson { get; set; } //Jsonで保存
}
public class CustomerB
{
public string? Name { get; set; }
private double _number;
[JsonIgnore]
public double Number
{
get { return _number; }
set
{
_number = value;
_numberS = value.ToString();
}
}
private string? _numberS;
public string? NumberS
{
get { return _numberS; }
set
{
_numberS = value;
_number = double.Parse(value);
}
}
private Brush? _color;
[JsonIgnore]
public Brush? Color
{
get { return _color; }
set
{
_color = value;
_colorS = value?.ToString(); // → value is null ? null : value.ToString();
}
}
private string? _colorS;
public string? ColorS
{
get { return _colorS; }
set
{
_colorS = value;
_color = Utils.GetBrushFromString(value);
}
}
}
public static class Utils
{
public static SolidColorBrush? GetBrushFromString(string? brushString)
{
return string.IsNullOrEmpty(brushString) ? null : (SolidColorBrush?)new BrushConverter().ConvertFromString(brushString);
}
}
시험을 준비하다Reference
이 문제에 관하여(PostgreSQL EF Core의 Json 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiro_t/items/2bfd91fcc3603ce02a47텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)