2012-03-22 2 views
3

У меня есть LINQ to SQL DataContext, который запрашивает четыре разных таблицы. Но мне нужно переместить одну из этих таблиц в другую базу данных. Возможно ли иметь базу данных и строку подключения для определенных таблиц, а другую для другой таблицы?Несколько соединений базы данных в 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 таблицы и имел другой для последнего. Это возможно?

Спасибо!

+0

Если вам не нужно присоединяться к таблицам, вы можете просто использовать два разных контекста, где каждая строка подключения указывает на разные базы данных. – adrianm

ответ

3

Непосредственно; наиболее очевидным было бы разделить контекст данных на два отдельных класса контекста данных (и две установки dbml).

Если вы внимательны, вы могли отпуск «как есть», и только явно поставить соединение-строку каждого экземпляра данных контекста, и просто не используют неправильные биты, однако: это рискованно. В частности, оставив его неповрежденным, вы все равно можете иметь запросы, которые пытаются объединиться между таблицами, которые теперь находятся в разных базах данных, что не сработает.

Контекст данных здесь предназначен только для работы в единой базе данных.

1

Linq-to-SQL работает лучше всего, когда все необходимые данные находятся в одной базе данных. Если вы начнете перемещать таблицы в другую базу данных, то объединение кросс-баз данных может быть больно.

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

0

Мы решали подобную ситуацию, создав LINQ к контексту SQL на базе развития, которая имеет все таблицы в одной базе данных, а затем создать синоним в производственной базе данных, чтобы указать на стол (s) в другой базе данных, и все это Just Works.

Ниже приводится краткое описание того, как это работает:

Dev среда:

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 

Очевидно, что в зависимости от среды может не работать в вашей ситуации, но это сработало для нас.

+0

Спасибо, это то, что я ищу. Как вы используете USE [Database] и укажите, какой ConnectionString будет использоваться в файле DataContext? –

+0

Код, который я написал, является псевдо-SQL-скриптом. Вам нужно создать синоним в SQL. Вы просто используете строку подключения для «Database1» в своем приложении. – Jon

0

У меня была такая же проблема в прошлом, и как я преодолел это, нужно было переместить таблицу, как указано, а затем создать представление в исходной базе данных, которое ссылается на таблицу.

Существует один недостаток в том, что представление затем доступно только для чтения. Однако, продвигаясь вперед, я бы не рекомендовал этот подход, я бы порекомендовал отдельные datacontexts для каждой базы данных.

Смежные вопросы