Проверка по свойству 2-й модели - PullRequest
1 голос
/ 08 декабря 2011

В рамках своей цели обучения новому навыку на работе я пытаюсь разработать систему управления сотрудниками в 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
}

Я был бы очень признателен за любые указатели или образцы для этого, или, возможно, я пытаюсь быть слишком идеальным, и это не может быть сделано в модели?

1 Ответ

0 голосов
/ 08 декабря 2011

Похоже, что в объекте HolidayRequest отсутствует ссылка на человека, запрашивающего выходной.Я бы ожидал увидеть Person или PersonId в объекте HolidayRequest.Оказавшись там, вы можете вычислить разницу между Duration и RemainingHoliday.

...