2010-08-25 19 views
1

J'ai un attribut personnalisé qui accède à la base de données avec nhiberate. L'attribut hérite en réalité de AbstractValidationAttribute de Castle et est utilisé pour valider les propriétés par rapport aux expressions régulières. Le problème est que ces expressions régulières sont gérées et stockées dans la base de données, et lorsque vous modifiez les valeurs dans la base de données, elles ne sont pas reflétées dans l'attribut. Fondamentalement, l'attribut initialise uniquement et donc les charges de la base de données une fois. Y at-il un moyen de contourner cela?C# Attributs personnalisés accédant à la base de données

Merci, Robin

Répondre

0

Dans mon livre, il se sent un peu étrange d'avoir un attribut d'effectuer des opérations de base de données. Cela dit, l'objet attribut est instancié chaque fois que vous appelez GetCustomAttributes par exemple, donc si l'attribut récupère les données dans le cadre de sa construction, il devrait le récupérer chaque fois que les attributs sont inspectés en utilisant cette méthode.

+0

Il n'est pas rare que la validation doive aller à la base de données. Lorsque vous regardez le bloc d'application de validation, il contient une méthode 'CreateValidator' qui permet de créer un validateur qui communique avec la base de données. Cela permet une bonne séparation des préoccupations, mais fonctionnel, l'effet est le même. L'attribut permet la validation en lisant la base de données. – Steven

+0

@Steven: Je ne trouve pas étrange que la validation dépende de la base de données, mais je trouve cela un peu étrange d'accéder à la base de données à partir d'une classe d'attributs. –

+0

Y a-t-il une meilleure approche pour contourner le problème? – robinbetts

0

Les attributs ne font généralement rien. Ce sont des marqueurs. D'autres codes doivent les utiliser pour effectuer certaines opérations en fonction des données utilisées dans l'attribut.