2016-08-17 2 views
0

Azure 테이블 저장소에서 사용하는 TableEntities를 리팩터링 할 수 있습니까?Azure 저장소 테이블 및 데이터 마이그레이션

  • SomeOtherID-SomeID 이름 바꾸기 : 같은 리팩토링을 수행 할 때

    class MyEntity: TableEntity 
    { 
        public string SomeID { get; set; } 
    } 
    

    이 값을 유지하는 것이 가능 : 예를 들어, 다음 엔티티를 고려?

  • 속성 유형을 string에서 Guid으로 변경 하시겠습니까?

예인 경우, EF6 마이그레이션과 같이 이러한 스키마 변경 사항을 일관된 방식으로 처리하기 위해 권장되는 방법은 무엇입니까?

+0

엔티티의 속성 이름을'SomeID'에서'SomeOtherID'로 바꾸고 싶습니까? 그렇게하는 동안 속성 유형도 변경하고 싶습니까? 설명 해주십시오. –

+0

@ GauravMantri 나는 모든 종류의 스키마 수정을 처리하기위한 통일 ​​된 접근법을 찾으려고합니다. 이러한 변화는 동시에 일어날 수도 있고 그렇지 않을 수도 있습니다. – Impworks

답변

1

탐색 할 수있는 옵션 중 하나는 사용자 지정 EntityProperty 해결 프로그램을 사용하는 것입니다. 당신이 SomeOtherID-SomeID에서 클래스의 속성의 이름을 변경하고 테이블 저장에 새 이름을 가진 개체를 삽입하면

, 당신은 테이블 스토리지 SomeID 및/또는 SomeOtherID 필드 엔터티를해야합니다.

다시 쿼리하면 구체화 된 엔터티 형식을 원시 속성 사전에서 만들기 위해 저장소 SDK에서 사용할 사용자 지정 EntityProperty 리졸버 대리자를 제공 할 수 있습니다. 그 위임자에서는 논리로이 시나리오를 처리하여 원하는 실제 유형을 작성할 수 있습니다. 그래서

public delegate T EntityResolver<T>(
    string partitionKey, 
    string rowKey, 
    DateTimeOffset timestamp, 
    IDictionary<string, EntityProperty> properties, 
    string etag 
); 

:

public virtual IEnumerable<TResult> ExecuteQuery<TResult>(
    TableQuery query, 
    EntityResolver<TResult> resolver, 
    TableRequestOptions requestOptions = null, 
    OperationContext operationContext = null 
) 

그리고 EntityProperty 리졸버는 속성 사전에서 강력한 유형의 엔티티를 구성하는 방법을 결정 대리자입니다 :

CloudTable에서 오버로드 ExecuteQuery 방법은 EntityProperty 해결됩니다 이 대리자에서 T 타입 반환 값을 생성하는 동안 SomeIDSomeOtherID 키를 사용하여 kvp를 처리하는 코드를 넣습니다.

동일한 유형을 사용하여 유형 변경 사항을 처리 할 수도 있습니다. 새 스키마와 함께 삽입하고 속성 유형을 변경하고 다시 읽을 때 EntityProperty 리졸버에서이를 처리합니다.

사용자 지정 리졸버를 유지 관리하는 대신 새 데이터 모델로 데이터를 마이그레이션하는 것이 좋습니다. 사용자 지정 리졸버는 데이터 이전 프로세스 중에 사용자가 전환 단계에있는 동안 요청을 계속 처리하는 동안 도움이 될 수 있습니다.

0

Azure 저장소 아키텍처에서이 작업을 수행 할 방법이 없다고 생각합니다. 엔티티를 읽고 하나씩 (EntityGroupTransaction을 사용하여 일괄 처리로) 일괄 적으로 업데이트하면됩니다.

관련 문제