2

我目前在多数据库 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 上,然后在属性窗口中,将 Source 从 dbo.UserDetails 更改为 Users.dbo.UserDetails 以完全限定 DB 名称。

然后,我可以通过执行以下操作发出单个数据上下文跨 DB 连接:

var results = (from user in datacontext.Table<UserDetail>()
        join paymentmethod in dataContext.Table<CurrentPaymentMethod>() on user.UserId equals paymentmethod.UserId
    ... rest of query here ...);

现在这是票务嘘声,可以按我的意愿工作。我目前遇到的唯一问题是模式更新等发生时(这相对频繁,因为我们处于重要的开发阶段)。

(最后是问题!)当我将任何表格拖到源自动获取数据库名称的数据上下文(因此会有 Users.dbo.UserDetails 而不仅仅是 dbo.UserDetails)?

感谢您的任何指点:)

特里

4

1 回答 1

1

看看它提供的T4 工具箱和 LinqToSql 代码生成器(由Oleg Sych提供) - 您可以自定义模板以生成您想要的引用,但我认为您将遇到的问题是数据库名称未存储在 dbml 文件中。

您可能会做的是向生成器添加一个过滤器,可能使用字典或类似的,这样在您的 .tt 文件中,您维护一个表列表和它们所属的数据库。这样,如果您的维护任务是从设计器中删除该类并重新放置它,它将获得正确的数据库名称。

于 2011-05-09T19:55:02.453 回答