2012-07-20 34 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