Envisagez la situation suivante. J'ai une entité nommée ProductSupplier qui est un modèle de présentation. Il est créé en faisant une jointure interne de Produits et Fournisseurs et en créant une nouvelle projection à partir d'une instruction Linq. La projection ProductSupplier crée également une liste d'objets PartType, qui est également un modèle de présentation.Propriétés de l'association sur l'entité non chargée pour la validation côté serveur
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; }
}
Je veux avoir une validation qui est pas ProductSupplier peut avoir plus de 10 parties distinctes. Cela signifie que tous les PartQuantities pour tous PartTypes qui appartiennent à un ProductSupplier doivent être additionnés et le total ne peut pas dépasser 10.
Pour cela, je créé un validateur personnalisé:
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;
}
Cela fonctionne bien quand la validation est appelée du côté du client. Le problème que j'ai est que quand le validateur est exécuté du côté du serveur, le IEnumerable est toujours vide.
J'ai essayé d'ajouter [RoundTripOriginal] à PartQuantity, et à diverses autres propriétés, telles que tous les champs clés, mais il s'agit toujours d'une liste vide lorsque vous avez terminé côté serveur.
Comment puis-je accéder à ces objets PartType lorsque la validation est exécutée sur le serveur?
J'ai accepté ceci comme réponse. Je veux juste qu'il soit clair pour quiconque cherchant cette réponse: attribuer votre propriété avec [Composition] au lieu de [Association] forcera le graphe d'objet entier à être renvoyé au service. – robertkroll