2015-02-10 2 views
0

У меня есть 2 базы данных со столами.Как вставить записи одной базы данных в другую базу данных в LINQ

Я хотел вставить записи из первой базы данных во вторую таблицу базы данных в LINQ. Я создал 2 файла dbml с 2 datacontexts, но я не могу закодировать вставку записей.

У меня есть список записей:

using(_TimeClockDataContext) 
{ 
    var Query = (from EditTime in _TimeClockDataContext.tblEditTimes 
       orderby EditTime.ScanDate ascending 
       select new EditTimeBO 
       { 
        EditTimeID = EditTime.EditTimeID, 
        UserID = Convert.ToInt64(EditTime.UserID), 
        ScanCardId = Convert.ToInt64(EditTime.ScanCardId), 
       }).ToList(); 
    return Query; 
} 

Теперь я хочу, чтобы вставить запись в новой таблице, которая находится в _Premire2DataContext.

+0

Привет, Добро пожаловать в переполнение стека. Это не очень хороший способ задать вопрос, пожалуйста, сначала прочтите правила. Не могли бы вы привести пример своего кода и объяснение того, что в этом коде не работает такое сообщение об ошибке? Благодарю. – BenjaminPaul

+0

У меня есть список записей: – Siddh

+0

Если его linq2sql, вызовите '_TimeClockDataContext.SubmitChanges()'. – Ofiris

ответ

0

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

EditTime[] sourceRows; 
using (var sourceContext = CreateSourceContext()) 
{ 
    sourceRows = ReadRows(sourceContext); 
} 

using (var destinationContext = CreateDestinationContext()) 
{ 
    WriteRows(destinationContext, sourceRows); 
} 

Теперь просто нужно заполнить в реализациях для ReadRows и WriteRows с использованием стандартного LINQ для SQL кода. Код для записи строк должен выглядеть примерно так.

void WriteRows(TimeClockDataContext context, EditTime[] rows) 
{ 
    foreach (var row in rows) 
    { 
     destinationContext.tblEditTimes.Add(row); 
    } 
    destinationContext.SubmitChanges(); 
} 

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

EditTime[] ReadRows(TimeClockDataContext context) 
{ 
    return (
     from EditTime in _TimeClockDataContext.tblEditTimes 
     orderby EditTime.ScanDate ascending 
     select EditTime 
    ).ToArray(); 
} 

Вы можете использовать массив или список - это не имеет большого значения. Я использовал массив в основном потому, что синтаксис короче. Обратите внимание, что мы возвращаем исходные объекты EditTime, а не создаем новые, так как это означает, что мы можем добавить эти объекты непосредственно во второй контекст данных.

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

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

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

+0

Thx Justin ... попробует – Siddh

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