2010-11-13 6 views
1

J'utilise Entity Framework 4.0 et j'ai un modèle conceptuel qui utilise intensément l'héritage.Entity Framework, Héritage et Namespacing

Je peux très bien exécuter la fonctionnalité d'héritage standard, mais j'ai des problèmes avec l'espace de noms des classes C# générées.

Mon problème est que le Entity Framework génère toujours toutes les classes (à la fois base et dérivés) dans le même espace de noms C#. Un exemple hypothétique des noms qualifiés des classes générées par le Entity Framework (à la fois de base et dérivés) avec un espace de noms racine de « MyApp » ressemblerait à ce qui suit

MyApp.MyBaseClass 
MyApp.MyDerivedClassA 
MyApp.MyDerivedClassB 
MyApp.MyDerivedClassC 
etc... 

Cependant, je veux mettre la classes de base et dérivées en différents espaces de noms. Par exemple, la classe de base serait toujours définie dans l'espace de noms racine (par exemple, MyApp), mais les classes dérivées seraient définies dans un "sous-espace de noms" (par exemple MyApp.MyDerivedClasses). Les noms qualifiés des classes dérivées doit ressembler à ce qui suit:

MyApp.MyDerivedClasses.MyDerivedClassA 
MyApp.MyDerivedClasses.MyDerivedClassB 
MyApp.MyDerivedClasses.MyDerivedClassC 
etc... 

J'ai réussi à y parvenir avec Linq sql en créant manuellement (c.-à ne pas utiliser la Linq sql Designer.) InheritanceMappingAttribute sur la classe de base et en pointant le mappage sur les classes dérivées qui sont définies dans l'espace de noms "dérivé".

Cependant, je ne peux pas savoir s'il est possible d'utiliser différents espaces de noms entre les classes de base et dérivées avec Entity Framework 4.0 (avec ou sans le concepteur). Cela peut-il être fait et si oui, comment puis-je le faire?

Répondre

0

Non, ce n'est pas possible avec l'ensemble standard d'outils. La spécification d'espace de noms sur le fichier de concepteur s'applique à toutes les entités qu'il contient. Vous pourriez essayer une première approche de code pour contourner cela (prolly votre meilleure option). Autre que cela, obtenez un bon livre sur les modèles T4 et modifiez le générateur T4 POCO pour vous permettre de spécifier ces choses.