2011-12-08 1 views
1

職場での新しいスキルを習得する目的の1つとして、私はASP.NET MVC(MVC 4)で従業員管理システムを開発しようとしています。第2モデルのプロパティに対する検証

モデルレベルですべての検証を実行するというコンベンションに従います(これは私が読んだことだけでなく、モデルの一部を使用するデスクトップアプリケーションの話もあるのでそのアプリにも制約が適用されていることを確認したい!)

私の問題は、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 
} 

私は本当にこのための任意のポインタまたはサンプルをいただければ幸いです、または多分私はあまりにも理想的でしようとしていますと、これはモデルで行うことができないのですか?

答えて

0

HolidayRequestオブジェクトで休暇をリクエストしている人への参照がないようです。私は、HolidayRequestオブジェクトにPersonまたはPersonIdがあると予想していました。そこには、DurationとRemainingHolidayの差を計算することができます。

+0

Personクラスの仮想ICollectionで参照が処理されるように、エンティティフレームワークを使用しています。少なくとも、リクエストDBテーブルにPersonIdフィールドがあるようです –