J'ai une application qui doit joindre des tables provenant de plusieurs bases de données dans une seule requête LINQ-to-SQL. Malheureusement, j'ai une configuration de classe DataContext distincte pour chaque base de données, donc cette requête ne fonctionnera pas. Je reçois une erreur comme ceci: « La requête contient des références à des éléments définis dans un contexte de données différentes »DataContext sur plusieurs bases de données
La solution idéale semble être de créer un seul DataContext pour les trois bases de données. Ils existent tous sur le même serveur, ils peuvent donc utiliser la même chaîne de connexion. J'utilise actuellement un script qui exécute sqlmetal.exe pour générer mes fichiers DBML et CS, ce qui signifie que je n'ai pas besoin de modifier manuellement les fichiers lorsque je change le modèle de données. Je veux maintenir ce niveau d'automatisation, mais sqlmetal.exe ne semble supporter qu'une seule base de données par fichier DBML. Est-ce possible avec sqlmetal ou un autre outil?
Est-ce possible avec sqlmetal ou un autre outil? Ou dois-je envisager une autre solution comme l'utilisation d'une seule base de données pour l'ensemble de l'application?
Voici le script de fichier batch J'utilise:
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SqlMetal.exe" /server:MYSERVER /database:DatabaseOne /views /functions /sprocs /dbml:DatabaseOne.dbml /namespace:Model.Domain.DatabaseOne /context:DatabaseOneDataContext /pluralize
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SqlMetal.exe" /server:MYSERVER /database:DatabaseOne /views /functions /sprocs /code:DatabaseOne.designer.cs /language:C# /namespace:Model.Domain.DatabaseOne /context:DatabaseOneDataContext /pluralize
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SqlMetal.exe" /server:MYSERVER /database:DatabaseTwo /views /functions /sprocs /dbml:DatabaseTwo.dbml /namespace:Model.Domain.DatabaseTwo /context:DatabaseTwoDataContext /pluralize
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SqlMetal.exe" /server:MYSERVER /database:DatabaseTwo /views /functions /sprocs /code:DatabaseTwo.designer.cs /language:C# /namespace:Model.Domain.DatabaseTwo /context:DatabaseTwoDataContext /pluralize
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SqlMetal.exe" /server:MYSERVER /database:DatabaseThree /views /functions /sprocs /dbml:DatabaseThree.dbml /namespace:Model.Domain.DatabaseThree /context:DatabaseThreeDataContext /pluralize
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\SqlMetal.exe" /server:MYSERVER /database:DatabaseThree /views /functions /sprocs /code:DatabaseThree.designer.cs /language:C# /namespace:Model.Domain.DatabaseThree /context:DatabaseThreeDataContext /pluralize
J'ai trouvé une réponse qui fonctionnera probablement pour moi, mais je serais toujours intéressé par un correctif de niveau supérieur. En d'autres termes, ubersqlmetal. – MikeWyatt