Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Принципы получения и модификации данных



Как уже было отмечено в прошлой части, сделать запрос можно двумя способами:

· Обратиться с помощью Entity SQL или LINQ to Entities к слою Служб объектов.

· Использовать Entity SQL для запроса напрямую к слою Клиентского провайдера данных Entity.

Рассмотрим принцип использования только первого варианта.

Основным объектом, который обеспечивает взаимодействие клиентского кода со слоем Служб объектов является контекст данных. Он представлен классом, унаследованным от ObjectContext или DbContext. Последний используется в подходе Код вначале.

Стоит отметить, что ObjectContext и DbContext не являются абстрактными. Механизм наследования используется только для того, чтобы добавить в новый класс свойства, отвечающие за доступ к данным. Их тип ObjectSet<T> или DbSet<T> соответственно, а имена совпадают с именами сущностей Модели. Эти свойства позволяют работать с объектами базы данных используя к LINQ to Entities.

Полученные объекты отслеживаются слоем Служб объектов. Поэтому при вызове метода сохранения изменений, база данных будут соответствующе модифицирована.

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

.NET Framework предоставляет несколько асинхронных шаблонов конструирования, которые разработчики могут использовать для извлечения преимуществ из фоновых потоков и освобождает пользовательский интерфейс высокоприоритетных потоков от выполнения других операций. ADO.NET поддерживает те же шаблоны конструирования в его классе SqlCommand. Конкретнее, методы BeginExecuteNonQuery, BeginExecuteReader и BeginExecuteXmlReader в сочетании с методами EndExecuteNonQuery, EndExecuteReader и EndExecuteXmlReader предоставляют асинхронную поддержку.

Эти методы поддерживаются только в Microsoft Windows XP и Windows 2000, но не в Windows 98 или Windows ME. Асинхронное программирование является основной функцией .NET Framework, а ADO.NET пользуется всеми преимуществами стандартных шаблонов конструирования.

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

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

Ответный вызов определяется путем задания делегата AsyncCallback в методе BeginExecuteNonQuery, BeginExecuteReader или BeginExecuteXmlReader. Этот делегат вызывается по завершении операции. Делегату можно передать ссылку на саму команду SqlCommand, чтобы облегчить доступ к объекту SqlCommand и вызов соответствующего метода End без необходимости использовать глобальную переменную.

В следующем Windows-приложении демонстрируется использование метода BeginExecuteNonQuery, выполняющего инструкцию Transact-SQL, которая содержит задержку в несколько секунд (имитируя длительную команду).

 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 282; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.)
Главная | Случайная страница | Обратная связь