我目前正在多数据库SQL Server环境中运行,并使用linq to sql来执行查询。
我使用此处记录的方法来实现跨数据库连接: http://www.enderminh.com/blog/archive/2009/04/25/2654.aspx
基本上是这样的:2个数据上下文 - 用户和付款
Users.dbo.UserDetails {PK: UserId }
Payments.dbo.CurrentPaymentMethod { PK: UserId }
我将表格拖到DBML上,然后在属性窗口中,将源代码从dbo.UserDetails更改为Users.dbo.UserDetails,以完全限定数据库名称。
然后,我可以通过执行以下操作来发布单个数据上下文跨数据库连接:
var results = (from user in datacontext.Table<UserDetail>()
join paymentmethod in dataContext.Table<CurrentPaymentMethod>() on user.UserId equals paymentmethod.UserId
... rest of query here ...);
现在这是一个蠢的嘘声,按照我的意愿行事。我目前遇到的唯一问题是架构更新等发生时(由于我们处于重要的开发阶段,因此相对频繁)。
(最后,问题!) 我想要实现的目标(我已经将问题标记为T4作为猜测,因为我知道DBML文件是T4引导的)是一种自动方式,当我将任何表拖到Source自动的数据上下文时获取数据库名称(因此将使用Users.dbo.UserDetails而不仅仅是dbo.UserDetails)?
感谢您的任何指示:)
特里
答案 0 :(得分:1)
查看它提供的T4 Toolbox和LinqToSql代码生成器(由Oleg Sych提供) - 您可以自定义模板以生成您想要的参考,但我认为您的问题要碰到的是数据库名称没有存储在dbml文件中。
您可能要做的是向生成器添加一个过滤器,可能使用字典或类似字符,这样在.tt文件中,您可以维护一个表及其所属的数据库列表。这样,如果您的维护任务是从设计器中删除该类并再次将其删除,它将获得正确的数据库名称。