Используя LINQ к SQL для копирования между базами данных

Используйте метод расширения Distinct Линка, чтобы позволить циклу foreach перечислять различные значения в вашей коллекции errorCodes / массиве:

using System.Linq;

...

foreach (var ec in errorCodes.Distinct())
{
    ...
}

(Не забудьте импортировать System.Linq Пространство имен.)

9
задан Jon Artus 15 May 2009 в 12:20
поделиться

5 ответов

Вот способ поверхностного клонирования объектов LINQ (без первичного ключа): Копирование объектов Linq .

Его можно настроить для использования метамодели, если вы не используют атрибуты. Тогда все, что вам нужно, это 2 контекста данных (один источник, один пункт назначения).

В качестве альтернативы вы можете посмотреть SqlBulkCopy - см. Копирование из одной таблицы базы данных в другую C #

3
ответ дан 4 December 2019 в 23:41
поделиться

Это чисто академическое упражнение?

В противном случае я бы серьезно подумал об использовании SSIS: http://msdn.microsoft.com/en-us/library/ms141026.aspx вместо этого, или об отказе этого Rhino ETL: http : //ayende.com/Blog/archive/2008/01/16/Rhino-ETL-2.0.aspx для передачи данных между базами данных. [текст ссылки] [1]

0
ответ дан 4 December 2019 в 23:41
поделиться

Зачем для этого использовать LINQ? Для фреймворка, когда вы можете использовать DTS SQL Server, кажется немного лишним.

0
ответ дан 4 December 2019 в 23:41
поделиться

Я использую DataContractCloner для отсоединения сущностей LINQ-to-SQL:

/// <summary>
/// Serializes the entity to XML.
/// </summary>
/// <returns>String containing serialized entity.</returns>
public string Serialize()
{
    return DataContractCloner.Serialize<Organization>(this);
}

/// <summary>
/// Deserializes the entity from XML.
/// </summary>
/// <param name="xml">Serialized entity.</param>
/// <returns>Deserialized entity.</returns>
public static Organization Deserialize(string xml)
{
    return DataContractCloner.Deserialize<Organization>(xml);
}

Все сущности LINQ-to-SQL уже аннотированы, поэтому создается присоединяемый клон, который позже можно повторно присоединить с некоторыми оговорками. Сначала будут разрешены отношения внешнего ключа, поэтому вы должны вставить в порядке зависимости, и если у вас есть циклические отношения, вам придется удалить внешние ключи из вашей схемы и повторно применить после передачи. Во-вторых, LINQ-to-SQL не выполняет вставку идентификатора, поэтому, если вы используете столбцы идентификатора с автоинкрементом, у вас могут возникнуть проблемы с отправкой. У меня не получилось заставить DataContext включить идентификацию вставки, но YMMV.

0
ответ дан 4 December 2019 в 23:41
поделиться

Вместо этого вы можете рассмотреть возможность использования класса SQLBulkCopy. Вы можете найти статью о проекте кода здесь: http://www.codeproject.com/KB/database/SqlBulkCopy.aspx . Это был бы более быстрый способ сделать это, но я предполагаю, что для этого потребуется, чтобы вы сами создавали запросы, вместо того, чтобы позволять LINQ-to-SQL делать это.

0
ответ дан 4 December 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: