2013-04-10 4 views
1

푸른 테이블을 처음 사용하고 있습니다. 테이블을 만들고, 항목을 삽입하고 다시 가져 오려고합니다.Azure 테이블 저장소, table.Execute 잘못된 엔터티를 반환합니다.

내가 가진 엔티티 클래스 :

public static void CreateTable() 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Settings.Azure_Storage_ConnectionString); 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 
     CloudTable table = tableClient.GetTableReference("TBUsers"); 
     table.CreateIfNotExists(); 
    } 

새로운 개체를 삽입 :

public class UserEntity : TableEntity 
{ 
    public string ID { get; set; } 

    public string Name { get; set; } 

    public string Surname { get; set; } 

    public string Email { get; set; } 

    public DateTime RegistrationTime { get; set; } 

    public string Password { get; set; } 

    public int Country { get; set; } 


    public UserEntity() { } 

    public UserEntity(MyUser user) 
    { 
     this.ID = user.ID.ToString(); 
     this.Name = user.Name; 
     this.Surname = user.Surname; 
     this.Email = user.Email; 
     this.RegistrationTime = user.RegistrationTime; 
     this.Password = user.Password.ToString(); 
     this.Country = user.Country; 

     this.PartitionKey = this.Country.ToString(); 
     this.RowKey = this.Email; 
    } 
} 

내가 함수를 사용하여 테이블을 만들 수

public void SaveAsNew() 
    { 
     UserEntity user = new UserEntity(this); 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Settings.Azure_Storage_ConnectionString); 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 
     CloudTable table = tableClient.GetTableReference("TBUsers"); 

     TableOperation insertOperation = TableOperation.Insert(user); 
     var res = table.Execute(insertOperation); 
    } 

모두 생성 및 삽입이 잘 작동 (에서 적어도 예외를 throw하지 않고 table.Execute가 올바른 엔티티를 반환 함)

하지만 문제가 있습니다. 내 상품을 가져오고 싶습니다. 코드는 다음과 같습니다.

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Settings.Azure_Storage_ConnectionString); 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 
     CloudTable table = tableClient.GetTableReference("TBUsers"); 
     TableOperation retrieveOperation = TableOperation.Retrieve<UserEntity>(pkey, rkey); 
     TableResult retrievedResult = table.Execute(retrieveOperation); 

retrieveResult.Result - 이상한 UserEntity 객체입니다. PartitionKey와 RowKey는 괜찮지 만 다른 속성은 null 또는 0 (기본값)입니다.

내가 잘못 했나요?

+0

그래서'table.Execute'에서 반환 된 엔티티는 속성 집합을 가지고 있지만 나중에 검색된 엔티티는 아닙니까? 쿼리에서 사용중인 RowKey와 PartitionKey가 삽입시 사용하고있는 것과 정확히 동일합니까? –

+0

삽입하기 전에 UserEntity가 올바르게 채워지고 table.Execute (insertOperation)가 올바른 Entity를 반환합니다. 그래서 저는 그 삽입이 맞다고 생각합니다. 키가 올바르지 않습니다. 유효하지 않은 키를 입력하면 null 객체 만 반환됩니다. 올바른 키가있을 때 UserEntity 객체를 반환하지만 지정되지 않은 속성이있는 경우 –

+0

이유를 찾았습니다. 처음 엔 실수가 있었기 때문에 일부 엔티티가 올바르게 삽입되지 않았습니다. 엔티티의 세트 수식어는 비공개 였기 때문에 값이 테이블에 저장되지 않았습니다. –

답변

0

아마도 UserEntity 인스턴스를 만들려면 기본 생성자가 필요합니다. 기본 생성자를 추가하고 다시 시도하십시오.

관련 문제