2012-07-20 56 views
0

我在LightSwitch中有一個屏幕,它有一個父實體和一個子實體。我在父實體驗證方法中編寫代碼,驗證子記錄是否符合特定業務規則。當用戶創建或編輯父代時,驗證規則可以正常運行,但只有在編輯該子代時纔會觸發該代碼。每次修改父或子記錄時,我需要在服務器保存時間驗證子項。LightSwitch 2011:驗證孩子

下面是驗證子實體行的總和樣本驗證規則等於100%:

partial void MarketingCampaign_Metrics_Validate(MarketingCampaign_Metric entity, EntitySetValidationResultsBuilder results) 
{ 
    if (entity.MarketingCampaign_AllocationRegions.Sum(r => r.RevenuePercent) != Convert.ToDecimal(100)) 
    { 
     results.AddEntityError("The Regions section Revenue (%) does not equal 100%."); 
    } 
} 

回答

0

我發現一個非常簡單的解決方案,不需要移動我當前的驗證代碼。添加以下行到子對象的驗證:

entity.MarketingCampaign_Metric.RowUpdateDate = System.DateTime.Now; 
    entity.MarketingCampaign_Metric.UpdatedBy = this.Application.User.FullName; 

通過在孩子驗證階段更新父,父被標記爲改變這迫使父實體的驗證代碼。

該解決方案還解決了另一個問題,即我想要更新子字段和RowUpdateDate,如果子實體被修改。我已經在跟蹤表中的所有實體更改,併爲最終用戶提供審覈屏幕以查看數據更改,但這使得查看最後一次觸摸記錄的人員更容易一些,即使它只是一個子記錄。從LightSwitch應用程序的數據管理員的角度來看,對子級的更改是對父級的更改。

0

如果你想要做在兩個不同的實體相同的檢查,提取邏輯變成了一種方法,可以從父實體&中調用子實體。

聽起來很簡單,或者我錯過了什麼?

而且,我從* ParentOrChildEntity_Saving *方法調用方法(其中ParentOrChildEntity是父實體的任何名稱,或子實體),而不是在任何驗證方法。

+0

我試着調整代碼來做到這一點,但我無法弄清楚如何得到這個來產生驗證錯誤。看來我只能生成在Validate方法中出現在UI中的驗證錯誤。也許我可能已經返回了一個可能已被處理的常規異常,但是我沒有嘗試過,因爲我特意試圖使這些事件顯示在驗證屏幕列表中。 – 2012-07-23 19:46:33