この例では、LINQ-SQLモデルクラスに対する部分クラスである2つのクラスがあります。LINQ-SQLモデルクラスのコントラクトを作成する別の方法はありますか?
public partial class Foo
{
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations()
{
yield break;
}
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
}
public partial class Bar
{
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations()
{
yield break;
}
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
}
冗長ロジックを削除するには、この機能を考慮する必要があります。私はIModelインターフェースとそれから契約の拡張メソッドを使ってみましたが、部分クラスで壊れました。
public class ModelBase
{
public bool IsValid
{
get
{
return this.GetRuleViolations().Count() == 0;
}
}
public void OnValidate(ChangeAction action)
{
if (!IsValid) throw new ApplicationException("Rule violations prevent saving");
}
public virtual IEnumerable<RuleViolation> GetRuleViolations() { return null; }
}
public partial class Blog : ModelBase
{
partial void OnValidate(ChangeAction action)
{
base.OnValidate(action);
}
public override IEnumerable<RuleViolation> GetRuleViolations()
{
// rules omitted
}
}
は、私は、これは別の方法を実行する必要があります。
私はこれで終わりましたか?ありがとうございました。
「削除よりも削除または挿入よりも異なる検証ルールがある可能性があります。nice – blu