Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

private static SqlConnection _sqlConnection = null;

private static void OpenConnection

{

_sqlConnection = new SqlConnection

{

ConnectionString = ConnectionString

};

_sqlConnection.Open;

}

private static void CloseConnection

{

if (_sqlConnection?.State != ConnectionState.Closed)

{

_sqlConnection?.Close;

}

}

Для

обработки записей классу
SqlBulkCopy
требуется имя (и схема, если она отличается от
dbo
). После создания нового экземпляра
SqlBulkCopy
(с передачей объекта подключения) установите свойство
DestinationTableName
. Затем создайте новый экземпляр специального класса чтения данных, который хранит список объектов, подлежащих массовому копированию, и вызовите метод
WriteToServer
. Ниже приведен код метода
ExecuteBulklmport
:

public static void ExecuteBulkImport<T>(IEnumerable<T> records,

string tableName)

{

OpenConnection;

using SqlConnection conn = _sqlConnection;

SqlBulkCopy bc = new SqlBulkCopy(conn)

{

DestinationTableName = tableName

};

var dataReader = new MyDataReader<T>(records.ToList,_sqlConnection,

"dbo",tableName);

try

{

bc.WriteToServer(dataReader);

}

catch (Exception ex)

{

// Здесь должно что-то делаться.

}

finally

{

CloseConnection;

}

}

Тестирование массового копирования

Возвратите в проект

AutoLot.Client
и добавьте в
Program.cs
следующие операторы
using
:

using AutoLot.Dal.BulkImport;

using SystemCollections.Generic;

Добавьте в файл

Program.cs
новый метод по имени
DoBulkCopy
. Создайте список объектов
Car
и передайте его вместе с именем таблицы методу
ExecuteBulklmport
. Оставшаяся часть кода отображает результаты массового копирования.

void DoBulkCopy

{

Console.WriteLine(" ************** Do Bulk Copy ************** ");

var cars = new List<Car>

{

new Car {Color = "Blue", MakeId = 1, PetName = "MyCar1"},

new Car {Color = "Red", MakeId = 2, PetName = "MyCar2"},

new Car {Color = "White", MakeId = 3, PetName = "MyCar3"},

new Car {Color = "Yellow", MakeId = 4, PetName = "MyCar4"}

};

ProcessBulkImport.ExecuteBulkImport(cars, "Inventory");

InventoryDal dal = new InventoryDal;

List<CarViewModel> list = dal.GetAllInventory;

Console.WriteLine(" ************** All Cars ************** ");

Console.WriteLine("CarId\tMake\tColor\tPet Name");

foreach (var itm in list)

{

Console.WriteLine(

$"{itm.Id}\t{itm.Make}\t{itm.Color}\t{itm.PetName}");

}

Console.WriteLine;

}

Хотя

добавление четырех новых объектов
Car
не показывает достоинства работы, связанной с применением класса
SqlBulkCopy
, вообразите себе попытку загрузки тысяч записей. Мы проделывали подобное с таблицей
Customers
, и время загрузки составляло считанные секунды, тогда как проход в цикле по всем записям занимал часы! Как и все в .NET Core, класс
SqlBulkCopy
— просто еще один инструмент, который должен находиться в вашем инструментальном наборе и использоваться в ситуациях, когда в этом есть смысл.

Резюме

Инфраструктура ADO.NET представляет собой собственную технологию доступа к данным платформы .NET Core. В настоящей главе было начато исследование роли поставщиков данных, которые по существу являются конкретными реализациями нескольких абстрактных базовых классов (из пространства имен

System.Data.Common
) и интерфейсных типов (из пространства имен
System.Data
). Вы видели, что с применением модели фабрики поставщиков данных ADO.NET можно построить кодовую базу, не зависящую от поставщика.

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

Наконец, вы научились защищать код манипулирования данными с помощью транзакций и ознакомились с применением класса

SqlBulkCopy
для загрузки крупных объемов данных в базы данных SQL Server, используя ADO.NET.

Часть VII

Entity Framework Core

Глава 22

Введение в Entity Framework Core

В предыдущей главе были исследованы основы ADO.NET. Инфраструктура ADO.NET позволяет программистам приложений .NET (относительно прямолинейно) работать с реляционными данными, начиная с выхода первоначальной версии платформы .NET В пакете обновлений .NET 3.5 Service Pack 1 компания Microsoft предложила новый компонент API-интерфейса ADO.NET под названием Entity Framework (EF).

Поделиться с друзьями: