2012-01-16 24 views
1

例如,我在C#中有一個bool? Status無法保存可空<bool>到Azure Table中時,其空

Status = true/false,它可以保存到Azure的表,沒有問題

但當Stats = null,不能拯救(更新)到Azure表,該列仍然保留舊值

我想這可能是因爲Azure表沒有方案,但最新的解決方案是什麼?

如何保存一個null覆蓋的原始值?

EDIT,代碼

數據是這樣的:

public class someEntity : TableServiceEntity 
{ 
    public bool? Status { get; set; } 
} 

更新這樣的:

tableContext.AttachTo("sometable", someEntity); 
tableContext.UpdateObject(someEntity); 
tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch & SaveChangesOptions.ReplaceOnUpdate); 

(我試圖AttachTo"*"如ETAG,試圖除去SaveChangesOptions,既不工作)

對不起我的愚蠢,應該是這個代碼,然後工作

tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate); 
+1

是在數據庫領域允許爲空? – f2lollpll 2012-01-16 07:09:46

+0

我相信是的,如果初始值爲空,那麼你仍然可以保存。但是,一旦你保存爲真/假,你永遠不能再回到空。 – 2012-01-16 07:13:59

+1

你可以發佈你的代碼嗎?這很可能是Nullable 默認值爲空的問題,並且API不考慮缺省值而沒有顯式更新/上標記標誌。 – lukiffer 2012-01-16 07:31:00

回答

4

由於@Matthew建議,我把答案在這裏

很簡單,使用:

tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate); 

對於多個選項,請使用| (or),而不是& (and)Reason

SaveChangesOptions.ReplaceOnUpdate = true意味着整個實體將被替換 SaveChangesOptions.ReplaceOnUpdate = false,意味着合併後,原有數據將被保留