仕事で新しいスキルを習得するという目標の一環として、ASP.NET MVC (MVC 4) で従業員管理システムを開発しようとしています。
私はモデル レベルですべての検証を実行するという規則に従おうとしています (これは私が読んだことが推奨されるという理由だけでなく、モデルの一部を使用する可能性のあるデスクトップ アプリの話があるためです。そのアプリでも制約が適用されます!)。
私の問題は、Person クラス (RemainingHoliday) に関するいくつかのデータがあることです。HolidayRequest を作成するとき、リクエストがその人の残り日数を超えないようにしたいと思います。
どうすればこれを行うことができますか?ValidationAttribute を拡張することで独自の検証ルールを作成できることはわかっていますが、ここで HolidayRequest クラスから Person クラスに移動するにはどうすればよいでしょうか?
モデルのスニペット:
public class Person
{
public string PersonID { get; set; } // this is populated with Users AD Guid
public string HolidayEntitlement { get; set; }
public virtual ICollection<HolidayRequest> Holidays { get; set; }
public int TotalEntitlement(int year = -1)
{
return this.HolidayEntitlement + this.HolidayAdjustments.Where(a => a.LeaveYear.Year == year).Sum(a => a.Adjustment);
}
public int RemainingHoliday(int year = -1)
{
return this.TotalEntitlement(year) - this.Holidays.Where(h => h.Start.Year == year).Where(h => h.Status != HolidayStatus.Rejected).Sum(h => h.Duration);
}
}
public class HolidayRequest
{
public string HolidayId { get; set; }
public DateTime Start { get; set; }
public DateTime Finish { get; set; }
public int Duration { get; set; } // This cannot be greater than Person.RemainingHoliday
}
これについてのポインタやサンプルを本当に感謝していますか、それとも理想的になりすぎてモデルでは実行できないのでしょうか?