我有一个需要将来自多个数据库的表连接到单个LINQ-to-SQL查询中的应用程序。不幸的是,我为每个数据库都有一个单独的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

最佳答案

一位同事发现a thread on another site [social.msdn.microsoft.com]讨论了同一问题。一种讨论的解决方案是在“主”数据库中的视图中执行所有联接,并将这些视图公开为应用程序中的对象。在我的情况下,这可能会起作用,因为我的大部分数据都在一个数据库中,而其他数据库中的少数表是只读的。

关于c# - 跨多个数据库的DataContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1910981/

10-11 15:28
查看更多