2010-04-06 7 views
1

J'ai un fichier .dbml qui contient bien sûr les classes auto-générées basées sur mes tables. Je voudrais toutefois les étendre à mes propres classes. Typiquement, je conçois de telle sorte que chacune de mes tables obtienne son propre espace de noms dans son propre dossier contenant toutes les classes dao et service associées. Donc, si j'ai affaire à une page qui ne concerne que les clients, par exemple, je ne peux inclure que le customerNS.Extension de classes LINQ à mes propres classes partielles dans différents espaces de noms?

Mais lors de l'utilisation de LINQ, il semble que je ne puisse pas le faire. J'ai essayé de supprimer un espace de noms par défaut du projet, j'ai essayé de placer le fichier .dbml dans son propre dossier avec un espace de nommage personnalisé, puis d'ajouter une instruction 'using', mais rien ne fonctionne. J'ai également vu les propriétés Entity Namespace, Context Namespace et Custom Tool Namespace associées au fichier .dbml et j'ai essayé de tout paramétrer avec x et d'essayer 'using x' dans mon autre classe pour me permettre d'étendre des classes partielles , mais ça ne marche pas.

Est-ce possible ou dois-je conserver toutes les classes partielles étendues dans le même espace de noms que le fichier .dbml?

Répondre

0

Si les types n'ont pas de relation, la réponse est simple: utilisez plusieurs fichiers dmbl. Si vous avez besoin de relations et que vous souhaitez également lire plusieurs espaces de noms.

Vous pourriez être en mesure de faire cela avec un fichier de modèle T4. Dans VS2010, il y a un modèle pour en créer un (c'est ce qu'on appelle un modèle de générateur ou quelque chose). Pour VS2008, vous pouvez en trouver un on codeplex

Les modifications que vous devrez apporter au modèle standard sont les suivantes: vous devez vous assurer que toutes les propriétés utilisent des noms complets (car les types associés se trouvent désormais dans des espaces de noms différents). Et pour la plupart des contrôles, vous pouvez probablement ignorer les informations de l'espace de noms à partir des classes générées (vous pouvez donc le définir dans vos classes partielles).

+0

Je suis curieux savez-vous ce qu'est la propriété Entity Namespace lorsque vous ouvrez le fichier .dbml en mode concepteur? Il dit "Spécifie l'espace de noms des classes d'entités générées." Il me semble que cela me permettrait de faire ce que je veux, mais cela ne semble pas avoir d'effet sur quoi que ce soit. – SventoryMang

+0

@ sah302: c'est un espace de noms pour toutes les classes d'entités et non des espaces de noms pour chacune d'entre elles. @Sander Rijken: T4 - bonne prise, bien sûr cela pourrait aider. Mais dans une situation particulière, je suggère plutôt d'envisager une stratégie différente pour placer des classes dans des espaces de noms. – vittore

+0

Oui merci, je l'ai juste fait fonctionner comme ça mais c'est toujours limité à un seul espace de noms. Merci pour vos réponses! – SventoryMang

0

Vous devez conserver toutes les classes linq dans un même espace de noms. Pourquoi vous essayez de mettre des classes DO dans différents espaces de noms?

+0

LINQ génère des classes gagner du temps, mais ce n'est pas comme ça que j'organise mes projets. Comme je l'ai dit, j'ai généralement un objet par espace de nom en utilisant une approche SOA sorta. Chaque espace de noms a sa classe d'objet respective ainsi que ses classes DAO et ses classes de service. Puis sur le front-end quand je travaille avec une page qui ne traite que d'une ou deux tables (qui sont en corrélation avec les objets), je ne mets que celles-ci et mon intellisense n'est pas super encombré et c'est plus efficace. – SventoryMang

+0

Je pense que ce n'est pas très pratique, je préfère avoir l'espace de noms DAL.DataObjects, les espaces de noms DAL.DataManager, etc; mais c'est probablement un choix de goût. Cependant, avoir tous les objets DO dans un même espace de noms et les séparer de manière indépendante, pas avec les services, vous permettra par exemple de faire référence à cet assemblage à partir de différents niveaux de votre application à plusieurs niveaux. Considérons par exemple l'assemblage 'DO' référencé par les assemblages' DAL' et 'BLL' – vittore

+0

Point intéressant que vous évoquez, bien que je ne sois pas sûr de rencontrer ce problème pour mon travail (nos besoins sont assez simples hehe). Merci pour votre réponse. – SventoryMang

Questions connexes