我有一個應用程序需要將多個數據庫中的表連接到一個LINQ-to-SQL查詢中。不幸的是,我爲每個數據庫都有單獨的DataContext類設置,所以這個查詢不起作用。我得到這樣的錯誤:「查詢包含對在不同數據上下文中定義的項目的引用」跨多個數據庫的DataContext
理想的解決方案似乎是爲所有三個數據庫創建單個DataContext。它們都存在於同一臺服務器上,因此它們可以使用相同的連接字符串。我目前使用運行sqlmetal.exe的腳本來生成我的DBML和CS文件,這意味着當我更改數據模型時,我不需要手動編輯任何文件。我想保持自動化水平,但sqlmetal.exe似乎只支持每個DBML文件的單個數據庫。
這可能與sqlmetal或其他工具?或者,我是否需要考慮另一種解決方案,如爲整個應用程序使用單個數據庫?
下面是我使用批處理文件腳本:
"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
我找到了一個可能適用於我的答案,但我仍然對更高級別的修補程序感興趣。換句話說,ubersqlmetal。 – MikeWyatt 2009-12-15 23:13:43