Рассмотрим следующую ситуацию. У меня есть объект с именем ProductSupplier , который является моделью презентации. Он создается путем внутреннего объединения Products и Suppliers и создания новой проекции из оператора Linq. Проекция ProductSupplier также создает список объектов PartType , который также является моделью представления.
public partial class ProductSupplier
{
private IEnumerable<PartType> _partTypes;
[Key]
public int ProductSupplierKey { get; set }
[Include]
[Association("ProductSupplier_PartType", "ProductSupplierKey", "ProductSupplierKey")]
public IEnumerable<PartType> PartTypes
{
get { return _partTypes ?? (_partTypes = new List<PartType>()); }
set { if (value != null) _partTypes = value; }
}
}
public partial class PartType
{
[Key]
public int PartTypeKey { get; set; }
[Key]
public int ProductSupplierKey { get; set; }
public int PartQuantity { get; set; }
}
Я хочу, чтобы проверка была нет ProductSupplier может иметь более 10 отдельных частей . Это означает, что все PartQuantities для всех PartTypes , которые принадлежат ProductSupplier , должны быть суммированы, и общая сумма не может превышать 10.
Для этого я создал собственный валидатор:
public static ValidationResult ValidatePartTotals(ProductSupplier productSupplier, ValidationContext validationContext)
{
if (productSupplier.PartTypes.Sum(p => p.PartQuantity) > 10)
return new ValidationResult("Must be less than 10 parts total.");
return ValidationResult.Success;
}
Это прекрасно работает, когда проверка вызывается со стороны клиента. У меня проблема в том, что когда валидатор запускается со стороны сервера, IEnumerable всегда пуст.
Я попытался добавить [RoundTripOriginal] к PartQuantity и к другим другим свойствам, таким как все поля Key, но он все еще является пустым списком, когда выполняется на стороне сервера.
Как получить доступ к этим объектам PartType при запуске проверки на сервере?