SqlBulkCopy и платформа объекта

Вот решение dplyr:

df %>% select_if(~sum(!is.na(.)) > 0)
16
задан John Saunders 31 March 2010 в 14:08
поделиться

4 ответа

Вам нужно будет преобразовать сущности в IDataReader или DataTable.

Существует небольшой вспомогательный класс, предназначенный для помощи с: http://archive.msdn.microsoft.com/LinqEntityDataReader/Release/ProjectReleases.aspx?ReleaseId=389

РЕДАКТИРОВАТЬ: ссылка MSDN не работает, альтернативную копию можно найти здесь: https://github.com/matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs

Затем Вы можете использовать SqlBulkCopy следующим образом:

var sbCopy= new SqlBulkCopy(connectionString);
sbCopy.DestinationTableName = "TableName";
sbCopy.WriteToServer(entitiesList.AsDataReader()); 
21
ответ дан 30 November 2019 в 17:04
поделиться

SqlBulkCopy - это прямой, почти байтовый массив, перенос данных строки из клиента в SQL Server. Это просто самый эффективный способ получить данные в SQL Server.

Однако его производительность заключается в действительно «массовых» операциях. Сотни или тысячи строк не обязательно достаточно высоки, чтобы оправдать использование. Десятки тысяч или миллионы строк - это производительность SqlBulkCopy. И, в конце концов, все, о чем мы на самом деле говорим, - это получение данных на сервер .

Существуют и другие серьезные проблемы с получением набора строк в таблице производственной базы данных. Переиндексация, переупорядочение (если есть кластеризованный индекс), проверка внешнего ключа, все эти вещи увеличивают время вставки и потенциально могут блокировать таблицы и индексы.

Кроме того, данные TVP записываются на диск (как данные временной таблицы), а затем доступны для размещения в ваших таблицах. SqlBulkCopy может работать непосредственно за вашим столом ... производительность в этом случае значительно выше, однако для обеспечения параллелизма необходимо сбалансировать скорость.

Я думаю, что общее правило таково: если у вас есть несколько строк для работы, подумайте о TVP, а если у вас много тысяч строк, подумайте о том, чтобы как можно быстрее получить его на SQL Server через SqlBulkCopy.

1
ответ дан 30 November 2019 в 17:04
поделиться

Вы можете рассматривать Dataset как сериализацию сущности данных. Однако в целом я считаю, что SqlBulkCopy - это сериализация данных из таблицы в таблицу, отсюда и причина для datatables.

1
ответ дан 30 November 2019 в 17:04
поделиться

SqlBulkCopy использует IDataReader при вызове метода WriteToServer, поэтому вы должны быть в состоянии реализовать IDataReader на основе коллекции, которая является IEnumerable. Это позволит вам принимать набор сущностей и вызывать SqlBulkCopy, используя вашу реализацию IDataReader.

1
ответ дан 30 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

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