0

我在 LightSwitch 中有一个屏幕,它有一个父实体和一个子实体。我在父实体 validate 方法中编写了代码,用于验证子记录是否符合特定的业务规则。当用户创建或编辑父级时,验证规则会正常运行,但如果只编辑子级,则根本不会触发代码。每次修改父记录或子记录时,我需要在服务器保存时间验证子记录。

以下是验证子实体行之和等于 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%.");
   }
}
4

2 回答 2

0

如果您想在两个不同的实体中进行相同的检查,请将逻辑提取到可以从父实体和子实体调用的方法中。

对我来说听起来很简单,还是我错过了什么?

而且,我将从 *ParentOrChildEntity_Saving* 方法(其中ParentOrChildEntity是父实体或子实体的名称)而不是在任何Validate方法中调用该方法。

于 2012-07-22T06:31:57.533 回答
0

我找到了一个非常简单的解决方案,不需要移动我当前的验证代码。我在子对象验证中添加了以下行:

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

通过在子验证阶段更新父级,父级被标记为已更改,这会强制父实体的验证代码。

此解决方案还解决了我遇到的另一个问题,即如果子实体被修改,我希望 UpdatedBy 字段和 RowUpdateDate 更改。我已经在跟踪表中的所有实体更改,并为最终用户提供审核屏幕以查看数据更改,但这使得查看最后一次触摸记录的人稍微容易一些,即使它只是一条子记录。从这个 LightSwitch 应用程序的数据管理员的角度来看,对子项的更改就是对父项的更改。

于 2012-07-23T19:44:46.430 回答