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

本文关键字:数据库连接 to SQL DataContext LINQ | 更新日期: 2023-09-27 18:28:45

我有一个查询四个不同表的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();
    }
}

所以现在它处理所有四张桌子。我希望它能处理前3张桌子,最后一张再处理一张。这可能吗?

谢谢!

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

不直接;最明显的是将数据上下文拆分为两个独立的数据上下文类(以及两个dbml设置)。

如果您小心的话,可以保持"原样",只需显式地为每个数据上下文实例提供连接字符串,并且不要使用错误的位:这是有风险的。特别是,保持它的完整性意味着您可能仍然有查询试图在现在位于不同数据库中的表之间进行连接,这是不起作用的。

这里的数据上下文仅设计用于在单个数据库中工作。

Linq-to-SQL在您需要的所有数据都在同一个数据库中时效果最好。如果您开始将表移动到另一个数据库,那么跨数据库连接可能会很痛苦。

http://www.enderminh.com/blog/archive/2009/04/25/2654.aspx

我过去也遇到过同样的问题,解决这个问题的方法是按照说明移动表,然后在引用该表的原始数据库中创建一个视图。

有一个缺点是视图是只读的。但是,今后我不会推荐这种方法,我会为每个数据库推荐单独的数据上下文。

我们已经解决了类似的情况,方法是在一个开发数据库上创建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

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