Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 245 246 247 248 249 250 251 252 253 ... 407
которые с помощью EF Core не удастся (такие как выполнение массового копирования данных в SQL), и для их решения требуются знания ADO.NET.

Сравнение ADO.NET и ADO

Если у вас есть опыт работы с предшествующей моделью доступа к данным на основе СОМ от Microsoft (Active Data Objects — ADO) и вы только начинаете использовать платформу .NET Core, то имейте в виду, что инфраструктура ADO. NET имеет мало общего с ADO помимо наличия в своем названии букв "A", "D" и "О". В то время как определенная взаимосвязь между двумя системами действительно существует (скажем, в обеих присутствует концепция объектов подключений и объектов команд), некоторые знакомые по ADO типы (например, Recordset) больше не доступны. Вдобавок вы обнаружите много новых типов, которые не имеют прямых эквивалентов в классической технологии ADO (скажем, адаптер данных).

Поставщики данных ADO.NET

В ADO.NET нет единого набора типов, которые взаимодействовали бы с множеством СУБД. Взамен ADO.NET поддерживает многочисленные поставщики данных, каждый из которых оптимизирован для взаимодействия со специфичной СУБД. Первое преимущество такого подхода в том, что вы можете запрограммировать специализированный поставщик данных для доступа к любым уникальным средствам отдельной СУБД. Второе преимущество связано с тем, что поставщик данных может подключаться непосредственно к механизму интересующей СУБД без какого-либо промежуточного уровня отображения.

Выражаясь просто, поставщик данных — это набор типов, определенных в отдельном пространстве имен, которым известно, как взаимодействовать с конкретным источником данных. Безотносительно к тому, какой поставщик данных применяется, каждый из них определяет набор классов, предоставляющих основную функциональность. В табл. 21.1 описаны распространенные основные базовые классы и ключевые интерфейсы, которые они реализуют.

Хотя конкретные имена основных классов будут отличаться между поставщиками данных (например, SqlConnection в сравнении с OdbcConnection), все они являются производными от того же самого базового класса (DbConnection в случае объектов подключения), реализующего идентичные интерфейсы (вроде IDbConnection). С учетом сказанного вполне корректно предположить, что после освоения работы с одним поставщиком данных остальные поставщики покажутся довольно простыми.

На заметку! Когда речь идет об объекте подключения в ADO.NET, то на самом деле имеется в виду специфичный тип, производный от DbConnection; не существует класса с буквальным именем "Connection". Та же идея остается справедливой в отношении объекта команды, объекта адаптера данных и т.д. По соглашению об именовании объекты в конкретном поставщике данных снабжаются префиксом в форме названия связанной СУБД (например, SqlConnection, SqlCommand и SqlDataReader).

На рис. 21.1 иллюстрируется место поставщиков данных в инфраструктуре ADO.NET. Клиентская сборка может быть приложением .NET Core любого типа: консольной программой, приложением Windows Forms, приложением WPF, веб-страницей ASP.NET Core, библиотекой кода .NET Core и т.д.

Кроме типов, показанных на рис. 21.1, поставщики данных будут предоставлять и другие типы; однако эти основные объекты определяют общие характеристики для всех поставщиков данных.

Поставщики данных ADO.NET

Подобно всем компонентам .NET Core поставщики данных поступают в виде пакетов NuGet. В их число входят поставщики, поддерживаемые Microsoft, но доступно и множество сторонних поставщиков. В табл. 21.2 описаны некоторые поставщики данных, поддерживаемые Microsoft.

Поставщик данных Microsoft SQL Server предлагает прямой доступ к хранилищам данных Microsoft SQL Server — и только к ним (включая SQL Azure). Пространство имен Microsoft.Data.SqlClient содержит типы, используемые поставщиком SQL Server.

На заметку! Хотя System.Data.SqlClient по-прежнему поддерживается, все усилия по разработке средств для взаимодействия с SQL Server (и с SQL Azure) сосредоточены на новой библиотеке поставщика Microsoft.Data.SqlClient.

Поставщик ODBC (System.Data.Odbc) обеспечивает доступ к подключениям ODBC. Типы ODBC, определенные в пространстве имен System.Data.Odbc, обычно полезны, только если требуется взаимодействие с СУБД, для которой отсутствует специальный поставщик данных .NET Core. Причина в том, что ODBC является широко распространенной моделью, которая предоставляет доступ к нескольким хранилищам данных.

Поставщик данных OLE DB, который состоит из типов, определенных в пространстве имен System.Data.OleDb, позволяет получать доступ к данным в любом хранилище данных, поддерживающем классический протокол OLE DB на основе СОМ. Из-за зависимости от СОМ этот поставщик будет работать только в среде Windows и считается устаревшим в межплатформенном мире .NET Core.

Типы из пространства имен System.Data

Из всех пространств имен, относящихся к ADO.NET, System.Data является "наименьшим общим знаменателем". Оно содержит типы, которые совместно используются всеми поставщиками данных ADO. NET независимо от лежащего в основе хранилища данных. В дополнение к нескольким исключениям, связанным с базами данных (например, NoNullAllowedException, RowNotlnTableException и MissingPrimaryKeyException), пространство имен System.Data содержит типы, которые представляют разнообразные примитивы баз данных (вроде таблиц, строк, столбцов и ограничений), а также общие интерфейсы, реализуемые классами поставщиков данных. В табл. 21.3 описаны основные типы, о которых следует знать.

Следующей задачей будет исследование основных интерфейсов System.Data на высоком уровне, что поможет лучше понять общую функциональность, предлагаемую любым поставщиком данных. В ходе чтения настоящей главы вы также ознакомитесь с конкретными деталями, а пока лучше сосредоточить внимание на общем поведении каждого типа интерфейса.

Роль интерфейса IDbConnection

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

public interface IDbConnection : IDisposable

{

  string ConnectionString { get; set; }

  int ConnectionTimeout { get; }

  string Database { get; }

  ConnectionState State { get; }

  IDbTransaction BeginTransaction();

  IDbTransaction BeginTransaction(IsolationLevel il);

  void ChangeDatabase(string databaseName);

  void Close();

  IDbCommand CreateCommand();

  void Open();

  void Dispose();

}

Роль интерфейса IDbTransaction

Перегруженный метод BeginTransaction(), определенный в интерфейсе IDbConnection, предоставляет доступ к объекту транзакции поставщика. Члены, определенные интерфейсом IDbTransaction, позволяют программно взаимодействовать с транзакционным сеансом и лежащим в основе хранилищем данных:

public interface IDbTransaction : IDisposable

{

  IDbConnection Connection { get; }

  IsolationLevel IsolationLevel { get; }

1 ... 245 246 247 248 249 250 251 252 253 ... 407
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен бесплатно.

Оставить комментарий