2009-08-07 6 views
3

J'ai une base de données avec plusieurs tables qui ont le même nom mais qui proviennent de schémas différents. Par exemple:Linq2Sql: comment gérer des tables avec le même nom et différents noms de schéma

[DatabaseName].[Schema1].[MyTable] 
[DatabaseName].[Schema2].[MyTable] 

Lorsque Linq2Sql génère du code pour cette base de données, il semble être juste ramasser la table du premier schéma et en ignorant complètement le second schéma:

[Table(Name="[Schema1].MyTable")] 
public partial class MyTable { } 

Cela rend effectivement impossible interroger la table sur le second schéma en utilisant Linq2Sql. Y at-il une solution de contournement pour cela?

Ma première idée est de modifier manuellement le code généré pour que j'ai:

[Table(Name="[Schema1].MyTable")] 
public partial class Schema1MyTable { } 

[Table(Name="[Schema2].MyTable")] 
public partial class Schema2MyTable { } 

mais avoir à maintenir ce code chaque fois que les modifications de la base de données serait une douleur énorme. D'autres idées?

Répondre

1

On dirait que cela est plus un problème dans Visual Studio 2010. J'ai créé deux tables, tous deux nommés cible, et lié à un schéma un, et l'autre lié à schéma b. J'ai ajouté le DBML et tiré les deux tables cibles (un montre comme cible (a) et l'autre cible (b) dans l'Explorateur de serveurs) sur le concepteur. Cela a créé une classe nommée cible et une autre nommée cible 1. Le code généré (modifié pour plus de clarté) montre l'outillage génère maintenant des classes un peu comme votre code exemple ci-dessus:

[global::System.Data.Linq.Mapping.TableAttribute(Name="a.target")] 
public partial class target 
{ //... class implementation snipped 
} 

[global::System.Data.Linq.Mapping.TableAttribute(Name="b.target")] 
public partial class target1 
{ // ... class implementation snipped 
} 
+0

Oui, il est grand qu'il génère des classes séparées pour les deux, mais le problème est le nom de la classe. Comment pouvez-vous dire quelle cible de schéma pointe vers target1? Je préférerais les nommer quelque chose comme atarget et btarget ou a_target et b_target. –

+0

@lfoust - Vous pouvez toujours modifier les noms du concepteur. – arcain

+0

Que je l'édite dans le concepteur ou dans le code généré, j'ai toujours le problème de devoir le ré-éditer chaque fois que la base de données change et que le modèle doit être re-généré. –

Questions connexes