2017-03-06 2 views
0

일부 트랜잭션 데이터를 Azure 테이블 저장소의 테이블에 저장하고 있습니다. 내 테이블에서 기존 엔티티를 "업데이트"하고 새로운 열을 추가하려고하면 열을 추가하지 않는 것처럼 보입니다.Azure 테이블 저장소의 기존 엔터티에 열 추가

예를 들면 다음과 같습니다. 시간표 항목을 표에 저장합니다. 내가 처음 엔티티를 생성 할 때, 상영하지만 먼저 테이블의 개체를 만들 때

PersonId -- TransactionId -- StartTime -- EndTime 

그래서, 내가 PersonId, TransactionId and StartTime 열이 결국 어떤 ENDTIME이있다. 나중에 EndTime을 추가하려고하지만 내 객체에 EndTime이 nullable 속성이고 NULL 일 때 해당 열이 만들어지지 않기 때문에 추가하지 않는 것처럼 보입니다.

기존 엔티티를 업데이트하고 프로세스에서 열을 추가하는 방법이 없습니까? 그렇지 않다면, 나는 EndTime에 더미 날짜를 넣고 엔티티의 초기 생성 중에 그것을 저장해야만 컬럼이 있고 나중에 업데이트 할 수 있습니다.

나는 더미 데이터를 저장하고 싶지 않다.

답변

4

기존 엔티티를 업데이트하고 프로세스에 열을 추가하는 방법이 없습니까?

예, 경우에 따라, 우리는 2 가지 방법으로 그렇게 할 수 있습니다 : 트랜잭션 데이터 모델 또는 사용을 편집 DynamicTableEntity

1.Edit 당신의 트랜잭션 데이터 모델 및 설정 ENDTIME의 날짜와 null 값이 허용됩니다 . 다음과 같이 데모 코드,

public class Transactional:TableEntity 
    { 
     public string PersonId { get; set; } 
     public string TransactionId { get; set; } 
     public DateTime StarTime { get; set; } 
     public DateTime? EndTime { get; set; } 

     public Transactional() { } 

     // Define the PK and RK 
     public Transactional(string persionId, string transactionId) 
     { 
      PartitionKey = persionId; 
      RowKey = transactionId; 
     } 
    } 

우리가 값을 할당하고 테이블에 개체에 삽입하려고하지 않는 경우는, 다음 더 ENDTIME 열이 없습니다. 다음은 데모 코드입니다.

CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
var tableClient = storageAccount.CreateCloudTableClient(); 
var table = tableClient.GetTableReference("tableName"); 
table.CreateIfNotExists(); 
var guid = Guid.NewGuid().ToString(); 
Transactional transactional = new Transactional("tomtest", guid); 
transactional.StarTime =DateTime.UtcNow; 
TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(transactional);   
TableResult result = table.Execute(insertOrMergeOperation);  

어떻게

// update entity 
TableOperation retrieveOperation = TableOperation.Retrieve<Transactional>("tomtest", "pk"); //PK, RK 
TableResult retrieveResult = table.Execute(retrieveOperation); 
Transactional updateEntity = retrieveResult.Result as Transactional; 
if (updateEntity != null) updateEntity.EndTime = DateTime.UtcNow; 
TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(updateEntity); 
// Execute the operation. 
TableResult resultinsertormerge = table.Execute(insertOrMergeOperation); 

2. 우리는 그 과정에서 열을 추가 DynamicTableEntity를 사용할 수있는 개체를 업데이트합니다. 다음은 데모 코드입니다.

var entity = new DynamicTableEntity("tomtest", "pk"); //PK, RK 
    entity.Properties.Add("EndTime", new EntityProperty(DateTime.UtcNow));  //properties want to add  
    var mergeOperation = TableOperation.InsertOrMerge(entity); 
    table.Execute(mergeOperation); 
2

푸른 표 스토리지 테이블 내의 엔티티가 실제로 완전히 다른 열을 가질 수 의미 스키마없는 데이터베이스이다.

은 즉, ENDTIME이 필요하지 않다면 특성없이 개체를 만들 수 있으며 ENDTIME 나중에 필요하게되면 MergeEntity/UpdateEntity 조작에 의해 미래에 속성을 추가했다.

관련 문제