LINQ to SQL DataContext中的多个数据库连接

3

我有一个LINQ to SQL的DataContext,用于查询四个不同的表。但是我需要将其中一个表移动到另一个数据库中。是否可以为某些表设置一个数据库和连接字符串,而为另一个表设置另一个数据库和连接字符串呢?

所以现在我的情况是这样的:

[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="DATABASE1")]
public partial class DataClassesDataContext : System.Data.Linq.DataContext
{
    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

    public DataClassesDataContext() : base(global::System.Configuration.ConfigurationManager.ConnectionStrings["DATABASE1ConnectionString"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

    public DataClassesDataContext(string connection) : base(connection, mappingSource)
    {
        OnCreated();
    }
}

现在它处理了所有四个表格。我希望它可以处理前三个表格并为最后一个表格创建另一个。这可行吗?

谢谢!


如果您不需要连接表,则可以使用两个不同的上下文,其中每个连接字符串指向不同的数据库。 - adrianm
4个回答

3
不直接可以。最明显的做法是将数据上下文拆分成两个独立的数据上下文类(两个DBML设置)。
如果小心,您可以保留“原样”,并只为每个数据上下文实例明确提供连接字符串,并且不要使用错误的部分,但是这很危险。特别是,保持不变意味着您仍然可能有查询尝试在现在位于不同数据库中的表之间进行连接,这是行不通的。
此处的数据上下文仅设计用于在单个数据库中工作。

1

0
我们曾经通过在开发数据库上创建包含所有表的LINQ to SQL上下文,然后在生产数据库中创建一个同义词来指向另一个数据库中的表(或表),从而解决了类似的情况,这一切都可以正常工作。
它的简要概述如下:
开发环境:

use [TheDatabase]
go

create table Table1
{
    -- stuff goes here
)
go

create table Table2
(
    -- stuff goes here
}
go

create table Table3
{
    -- stuff goes here
}

生产环境

use [Database2]
go

create table Table3
{
    -- stuff goes here
)

use [Database1]
go

create table Table1
{
    -- stuff goes here
)
go

create table Table2
(
    -- stuff goes here
}
go

create synonym Table3 for Database2.dbo.Table3

显然,根据您的环境,它可能无法在您的情况下工作,但对我们来说效果很好。


谢谢,这正是我想要做的。如何使用 [Database] 并指定在 DataContext 文件中使用哪个 ConnectionString? - user482375
我发布的代码是一个伪SQL脚本。你需要在SQL中创建同义词。你只需在应用程序中使用“Database1”的连接字符串即可。 - Jon

0

我以前也遇到过同样的问题,我克服这个问题的方法是将表移动到指定位置,然后在原始数据库中创建一个引用该表的视图。

缺点是该视图只读。但是,从现在开始,我不建议采用这种方法,而是为每个数据库建立单独的数据上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接