Несколько подключений к базе данных в LINQ to SQL DataContext - PullRequest
3 голосов
/ 22 марта 2012

У меня есть 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 таблицы и иметь другую для последних. Это возможно?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 22 марта 2012

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

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

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

1 голос
/ 22 марта 2012

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

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

0 голосов
/ 22 марта 2012

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

0 голосов
/ 22 марта 2012

Мы решили аналогичную ситуацию, создав контекст 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...