2010-06-09 10 views
1

Les classes de contacts ne fonctionnent-elles que pour les notifications de données ou pour n'importe quel attribut? J'ai essayé d'attacher un ColumnAttribute à un champ dans ma classe de copain, mais il semble qu'il ne soit pas traité dans la classe d'origine. Les deux classes sont liées via MetadataType.Les classes d'amis fonctionnent-elles uniquement pour DataAnnotations?

Répondre

0

Ma réponse n'est pas spécifique à DataAnnotations, il s'agit d'une réponse globale à la question de savoir comment associer des descripteurs de type.

Créez une sous-classe de TypeDescriptionProvider qui décrit la relation des classes (vous pouvez ignorer cette partie dans certains cas où vous pouvez utiliser un descripteur existant tel que AssociatedMetadataTypeTypeDescriptionProvider).

Ensuite, utilisez TypeDescriptor.AddProvider ou TypeDescriptor.AddProviderTransparent pour les attacher de manière dynamique à l'exécution. Ma suggestion est d'avoir un service qui a une liste de types marqués, et exécute tous les types à travers lui (sur demande, de sorte que le coût de la performance est répartie au moment de l'application), et quand un type est traité, ajouter le type à la liste, et la prochaine fois que ce type demande, vous savez que c'est dans la liste.

0

La technique de classe buddy n'est pas spéciale pour DataAnnotations. Cependant, cela ne fonctionne que si le code de réflexion que vous utilisez fait quelque chose avec l'attribut MetadataType. Ainsi, ASP.NET MVC est un exemple de base de code qui gère le concept de classe buddy, contrairement à Linq-to-sql. Donc, au moment où vous êtes coincé si vous voulez utiliser des classes de contacts pour ajouter un ColumnAttribute. Cependant, si vous avez vraiment besoin d'imagination, Linq-to-SQL prendra un document XML avec les mappages au lieu d'utiliser des attributs. Vous pouvez l'utiliser pour créer vos mappages en tant qu'alternative aux instances dans lesquelles vous avez peut-être utilisé une classe de contacts. Si vous avez besoin d'être vraiment, vraiment chic, allez-y et créez votre classe de pote, puis écrivez votre propre gestionnaire de réflexion compatible avec vos classes Linq et créez des documents de mapping XML à partir de cela pour vos besoins DataContext . Vous pourriez probablement faire cela dans moins de 50 lignes de code.