J'utilise Entity Framework 4 et un site de données dynamiques pour exposer une interface d'administration simplifiée à quelques utilisateurs. Travailler assez bien en général, mais j'ai rencontré ce problème sur un couple de champs sur mon modèle.Prévention de la validation dans Entity Framework 4
Plusieurs tables ont des champs liés à l'audit: CreatedBy, CreatedDate, ModifiedBy et ModifiedDate. Ces champs sont obligatoires dans la base de données et les modèles associés marquent les propriétés comme non nulles (tout ce qu'il devrait être). Cependant, je suis en train de définir les valeurs de ces champs dans le code - les modèles de champ pour les types de champs marquent ces champs spécifiques comme désactivés sur la page, et dans l'événement SavingChanges je définis ces champs sur les valeurs appropriées. Tout fonctionne super lorsque je mets à jour un élément existant.
Le problème survient lorsque j'essaie de créer un nouvel élément. Je veux que ces champs restent vides sur la page et soient automatiquement remplis par mon code lors de la soumission, mais les modèles de champs configurent RequiredFieldValidators pour ces champs et ne me laisseront pas les soumettre sans valeur. Normalement, ce serait génial, sauf que je veux empêcher EF de valider ces champs au moment de la soumission de la page. Je me rends compte que je pourrais marquer les champs comme nullables dans la base de données et que cela résoudrait le problème - ce serait probablement très bien du point de vue des données, mais je ne suis pas à l'aise de le faire - pour une chose c'est Il n'est pas improbable que certains des modèles de ces champs apparaissent en masse, éventuellement par quelqu'un d'autre, à une date ultérieure. Je préférerais que la base de données applique la non-nullité de ces champs. Dans les modèles de champs, j'ai essayé de déplacer l'appel intégré SetUpValidator() pour que RequiredFieldValidator ne s'exécute pas lorsque ces champs spécifiques sont chargés, et j'ai également essayé de désactiver les RequiredFieldValidators et de forcer leur propriété IsValid à true. Aucune de ces actions ne me permet de soumettre la page.
Existe-t-il un moyen de dire à EF/Dynamic Data d'ignorer la validation pour certains champs?
EDIT
Comme il est indiqué ci-dessous, j'ai essayé aussi les marquer annulable dans le modèle et non pas dans la base de données, ce qui a provoqué une erreur: Problem in mapping fragments...Non-nullable column...in table...is mapped to a nullable entity property.
EDIT # 2
I J'ai trouvé une solution qui fonctionne, mais nécessite de modifier le fichier du concepteur généré automatiquement pour l'ensemble d'entités, ce qui est au mieux fragile. J'aimerais savoir comment le faire, mais si rien n'apparaît dans les prochains jours, je posterai ma propre réponse.
Pourquoi ne pas les marquer comme nullable dans votre modèle et non-nullable dans la base de données. Est-ce que ça ne marchera pas? – Steven
Déjà essayé cela (oublié de le mettre dans ma liste) et non - alors je reçois des erreurs que le modèle a des champs nullables qui ne sont pas valables dans la base de données. Merci quand même! – cori
Avez-vous déjà trouvé une bonne solution pour cela? J'ai le même problème et je ne peux pas croire que tout le monde utilisant EF et les champs CreatedDate autogénérés ne le soit pas non plus. – EdenMachine