0

親エンティティと子エンティティを持つ LightSwitch の画面があります。親エンティティの検証メソッドに、子レコードが特定のビジネス ルールを満たしているかどうかを検証するコードを記述しました。ユーザーが親を作成または編集すると、検証ルールは適切に実行されますが、子のみが編集された場合、コードはまったくトリガーされません。親レコードまたは子レコードが変更されるたびに、サーバーの保存時に子を検証するにはどうすればよいですか。

以下は、子エンティティ行の合計が 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

現在の検証コードを移動する必要のない、本当にシンプルなソリューションを見つけました。子オブジェクトの検証に次の行を追加しました。

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

子の検証フェーズ中に親を更新することにより、親に変更のフラグが付けられ、親エンティティの検証コードが強制されました。

このソリューションは、子エンティティが変更された場合にUpdatedByフィールドとRowUpdateDateを変更したいという別の問題も解決しました。私はすでにテーブル内のすべてのエンティティの変更を追跡しており、エンドユーザーがデータの変更を確認するための監査画面を提供していますが、これにより、レコードが子レコードのみであった場合でも、レコードに最後に触れたのは誰かを確認するのが少し簡単になります。このLightSwitchアプリケーションのデータ管理者の観点からは、子への変更は親への変更です。

于 2012-07-23T19:44:46.430 に答える
0

2 つの異なるエンティティで同じチェックを実行する場合は、親エンティティと子エンティティの両方から呼び出すことができるメソッドにロジックを抽出します。

私には単純に聞こえますか、それとも何か不足していますか?

そして、 Validateメソッドではなく、*ParentOrChildEntity_Saving* メソッド ( ParentOrChildEntityは親エンティティまたは子エンティティの名前) からメソッドを呼び出します。

于 2012-07-22T06:31:57.533 に答える