2010-03-01 4 views
2

En lisant un article sur EF 4, j'ai lu que EF pluralise certains objets (EntitySet, Navigation pointant sur EntityCollection, etc.), tout en utilisant le formulaire singulier pour d'autres objets. Par curiosité - comment fait-il cela? Utilise-t-il un dictionnaire intégré?Comment Entity Framework 4 conçoit-il la pluralisation?

Merci,

Scott

Répondre

2

Microsoft a ajouté une classe abstraite de base PluralizationService au framework .NET - qui peut être utilisé à d'autres fins aussi bien!

public abstract class PluralizationService 
{ 
     public static PluralizationService CreateService(CultureInfo culture); 

     public abstract string Pluralize(string word); 
     public abstract string Singularize(string word); 
} 

Voir un billet de blog sur EF Pluralization qui explique en détail. Microsoft fournit quelques implémentations concrètes de ce service dans différentes langues/cultures, mais vous êtes totalement libre de créer le vôtre. Je ne sais pas comment les services de pluralisation fournis par EF4 fonctionnent - mais il s'agit probablement d'une combinaison de certaines règles linguistiques et d'une pléthore d'exceptions à gérer différemment. Ceux-ci sont très probablement stockés en tant que ressources ou d'une autre manière à l'intérieur des assemblées pertinentes.

+0

Wow, c'est cool! Une question de plus - pourquoi ont-ils choisi une classe de base abstraite? Je pensais que la programmation sur une interface était préférable à la construction de hiérarchies d'héritage? –

+0

Je n'étais pas là pour les réunions de conception :-) mais une classe de base abstraite peut implémenter un comportement de base hérité de tous les descendants - vous ne pouvez pas le faire avec une interface. Peut-être qu'ils avaient leurs raisons de faire quelque chose comme ça - pas sûr. –

+0

Hmm. Selon "C# 4.0 in a Nutshell" - "Les membres abstraits sont comme des membres virtuels, sauf qu'ils ne fournissent pas une implémentation par défaut Cette implémentation doit être fournie par la sous-classe, sauf si cette sous-classe est également déclarée abstraite." La différence voudrait-elle spécifier des membres statiques (comme ils l'ont fait plus haut)? –