2017-09-09 1 views
0

개체에 테이블 엔티티 개체 목록이 포함되어 있으면 푸른 테이블에서 개체를 가져 오는 방법이 혼란 스럽습니다. 여기에 지금 내가 목록을 얻을 수 있습니다 I 사용자 ID로 분할하기 위해 노력하고있어 지금복잡한 유형의 푸른 색 테이블 저장소

public class Class1 : TableEntity 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
    public List<Class2> Items { get; set; } 
} 

public class Class2 : TableEntity 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
} 

을 저장하고 다음 각 클래스 1은 신분증의 행 키가 할 노력하고있어의 예입니다 주어진 사용자에 대해 class1을 사용하거나 사용자와 ID를 알고 단일 class1 개체를 얻을 수 있습니다. 나는 SQL 세계에서오고있어 테이블 스토리지에 새로운 브랜드이기 때문에이 모든 것을 잘못 생각할 수도 있습니다.

테이블 스토리지에 Class1을 저장하려고하면 목록을 제외하고 모두 저장됩니다. 클래스 1 객체를 저장하는 가장 좋은 방법은 무엇입니까? 그것도 가능합니다. 나는 또한 주요 오브젝트와 같은 테이블에리스트를 저장하지 말아야한다고 생각합니다. 나는 목록에서 개별 항목을 편집해야하는 시나리오를 가지고 있지만 한 테이블에 모든 항목을 저장하면 전체 개체를 꺼내 목록에서 항목을 찾아 편집하고 싶습니다. 전체 개체를 다시.

나는 하늘빛 테이블 스토리지 가이드를 시작하려고했지만 여기서 내가보고있는 시나리오에는 아무런 의미가없는 것처럼 보였다.

답변

2

목록은 지원되는 테이블 저장소 유형이 아니며, 다른 컬렉션도 아니며 .NET에서 사용할 수있는 유형입니다. 목록 속성을 Json 문자열로 변환하면 괜찮습니다. 물론 전체 객체를 json 문자열로 변환하고 테이블에 쓸 수는 있지만 BLOB 저장소와 같은 푸른 테이블 저장소를 사용하는 것과 같습니다. json 인 문서 db 데이터 모델을 사용하여 azure cosmos db를 고려할 수도 있습니다. 그리고 json 문서를 작성하고 하늘색 코스모스 db에 저장하는 것처럼 목록 및 기타 속성 유형을 작성할 수 있습니다.

추가 주석이 하나 있습니다. 복잡한 유형에 IEnumerable, ICollection 유형 속성이없는 한 실제로 복잡한 테이블 유형을 작성하고 읽을 수 있습니다. 그래서 당신은 자신의 속성 등을 가질 수있는 복잡한 유형 B와 C의 속성을 가질 수있는 객체 A를 가질 수 있습니다. 이러한 유형의 객체를 테이블 저장소에 쓰고 읽는 방법은 최근에 추가 된 TableEntity.FlattenConvertBack 메쏘드를 사용하는 것입니다 (> Azure Storage .NET SDK v8.0.0.0).

이러한 API는 중첩 된 복잡한 속성으로 복잡한 개체를 병합하고 원본 테이블을 투명하게 저장하면 원본 복합 개체를 다시 변환합니다. 주의 사항은 IEnumerableICollection 유형 속성을 지원하지 않는다는 것입니다. 나는 여전히 복잡한 유형을 테이블 스토리지에 쓰는 주제와 관련하여 이것을 언급하는 것이 좋을 것이라고 생각했다.

업데이트 : 나뿐만 아니라 IEnumerable 유형을 지원하기 위해 (푸른 저장 SDK에서 TableEntity.Flatten/ConvertBack<T> API의 원래 소스 코드를했다) ObjectFlattenerRecomposer Nuget 패키지를 확장 한 . 따라서 패키지는 아래에 설명 된대로 정확하게 작동하지만 복잡한 객체를 병합/재구성하지만 현재는 IEnumerables를 처리합니다.

여기에서 시도해보세요. https://www.nuget.org/packages/ObjectFlattenerRecomposer/

관련 문제