私はLINQ部分クラスを持っている:私のコードではLINQ
public partial class resp
{
public IEnumerable<RuleViolation> GetRuleViolations()
{
if (String.IsNullOrEmpty(respName))
yield return new RuleViolation("Responsibility name required", "respName");
yield break;
}
public bool IsValid
{
// Quick method for checking to see whether an object contains any RuleViolations
get { return (GetRuleViolations().Count() == 0); }
}
partial void OnValidate(ChangeAction action)
{
// Hook to LINQ to be notified before db is actually persisted .. and check to make sure resp is not used by respApprover or approvals
if (action == ChangeAction.Delete && ((respApprovers.Count() != 0 || approvals.Count() != 0)))
throw new ApplicationException("You cannot delete a responsibility that is in use");
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
}
それが削除される前に、私は責任(dbo.resp)が存在するかどうかを確認できるようにしたいと思います。
私はこのチェックをOnValidate
と同じようにに設定し、失敗した場合はアプリケーション例外を返します。また
、通常の検証中に、私は必ずルール違反が行われていないことを確認したい(この場合はresp.respNameを...)
ので、通常私はちょうどtry { } catch { var errors = resps.GetRuleViolations() }
と確認を行うことができます検証エラーがあるかどうか。もちろん、取られているもののアクションを知りません(Changeaction.Delete)
私は私の主な質問は、私はその理由を返すのではなくChangeaction
が削除されたときに私の全体のアプリケーションをクラッシュさOnValidate
持つことができるか、だと思います。通常、私はGetRuleViolations
をキャッチしますが、私が 'if statement'をGetRuleViolations
に入れれば、データが正しいかどうかをチェックする際にも常に真です(言い換えれば、respApprovers.Count()
は新しい挿入のチェックでも問題になります)。 I私はのみカウントチェックが削除時に行うことにしたいしたくない)
あるいはおそらくもっと単純に次のように述べています。私は誰かがrespApprovers.Count() > 0
またはapprovals.Count() > 0
を持ってRESPを削除しようとしたときGetRuleViolations
が私に伝えたいだけOnValidate
Changeaction
が削除されます。
これはLINQ to SQLのように見えますが、正しい場合はタイトルとタグを付けてください(他のLINQプロバイダの回答が得られるかもしれません)。 – Richard
固定。とても有難い。 –