我有一个应用程序需要将多个数据库中的表连接到一个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