2009-09-04 7 views
5

Après avoir fait glisser deux tables d'une base de données, je passe à une autre et faites glisser une table. Maintenant, je reçois un message si je veux remplacer la chaîne de connexion par la nouvelle. Je veux des tables de plusieurs bases de données dans un DBML. Est-ce possible?Tables de deux bases de données différentes dans un DBML?

Répondre

3

Je ne crois pas que ce que vous cherchez est possible, car DataContext n'aurait alors aucun moyen facile de résoudre les résultats de deux bases de données distinctes. Si vous cherchez à créer des objets de domaine à partir de deux bases de données distinctes, votre meilleur choix serait d'avoir deux DBML séparés, puis d'utiliser un pont (GOF) ou un autre modèle de conception pour instancier les objets de votre domaine.

+0

Avez-vous des liens vers la façon dont cela fonctionnerait? Je pense que j'ai une situation similaire. J'ai une base de données principale qui contient une liste de clients et le nom de serveur et le nom de base de données pour chacun des clients. Ils ont tous une structure de base de données identique, donc, je voudrais remplir le modèle à partir de différentes bases de données en fonction du client sélectionné. – stephenbayer

+1

@stephenbayer - votre situation est en fait un peu différente. Puisque les données ne sont pas réparties sur plusieurs bases de données, votre travail est un peu plus simple. Créez un service (web, soap, repos, pas important pour cette discussion) qui saura trouver une chaîne de connexion ou un préfixe de nom de base de données (plus sécurisé) à votre DB. Utilisez un identificateur de client comme index pour trouver la base de données spécifique. Votre application peut interroger ce client DB pour plus d'informations sur la façon de se connecter à la base de données spécifique. –

0

Une autre option consiste à créer un lien de serveur sur la base de données qui pointe vers l'autre et créer des alias pour les tables distantes à partir de la base de données "locale". Je crois alors que vous seriez en mesure de les référencer comme s'ils étaient tous dans la même base de données.

+0

alors que c'est une réponse techniquement correcte, ne serait-ce pas une mauvaise pratique à suivre? J'ai dû faire face à des serveurs liés dans le passé, et d'après mon expérience, ça n'a pas été joli en termes de maintenabilité ou de performance –

5

Il est tout à fait possible de référencer plusieurs bases de données au sein d'un même DBML, à condition que ces bases de données résident sur le même serveur SQL.

Dans Visual Studio, cliquez avec le bouton droit sur le DBML, cliquez sur "Ouvrir avec ..." et sélectionnez Éditeur de texte XML avec codage.

Vous verrez votre première table que vous avez fait glisser dans ressemble à ceci:

< Table Name = "dbo.MyTable1fromMyDatabase1" membre = "MyTable1fromMyDatabase1" >

Pour vos tables d'autres les bases de données que vous souhaitez ajouter, entrez-les comme ceci:

< Table Name = "MyDatabase2.dbo.MyTable1fromM yDatabase2" Membre = « MyTable1fromMyDatabase2 » >

Cela fonctionne en supposant la même connexion fonctionne pour les deux bases de données, et vos expressions LINQ peut maintenant interroger sur les deux bases de données!

0

Nous pouvons également créer une vue qui interroge la table dans l'autre base de données. Nous pouvons sélectionner, insérer et mettre à jour cette vue, ce qui affectera également la table de l'autre base de données.

Questions connexes