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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 396 397 398 399 400 401 402 403 404 ... 642

Очистите код, сгенерированный в Program.cs, и поместите в начало файла Program.cs следующие операторы using:

using System;

using System.Linq;

using AutoLot.Dal;

using AutoLot.Dal.Models;

using AutoLot.Dal.DataOperations;

using System.Collections.Generic;

Чтобы задействовать AutoLot.Dal, замените код метода Main() показанным далее кодом:

InventoryDal dal = new InventoryDal();

List<CarViewModel> list = dal.GetAllInventory();

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

Console.WriteLine("IdtMaketColortPet Name");

foreach (var itm in list)

{

  Console.WriteLine($"{itm.Id}t{itm.Make}t{itm.Color}t{itm.PetName}");

}

Console.WriteLine();

CarViewModel car =

  dal.GetCar(list.OrderBy(x=>x.Color).Select(x => x.Id).First());

Console.WriteLine(" ************** First Car By Color ************** ");

Console.WriteLine("CarIdtMaketColortPet Name");

Console.WriteLine($"{car.Id}t{car.Make}t{car.Color}t{car.PetName}");

try

{

  // Это потерпит неудачу из-за наличия связанных данных в таблице Orders.

  dal.DeleteCar(5);

  Console.WriteLine("Car deleted."); // Запись об автомобиле удалена.

}

catch (Exception ex)

{

  Console.WriteLine($"An exception occurred: {ex.Message}");

                   // Сгенерировано исключение

}

dal.InsertAuto(new Car { Color = "Blue", MakeId = 5, PetName = "TowMonster" });

list = dal.GetAllInventory();

var newCar = list.First(x => x.PetName == "TowMonster");

Console.WriteLine(" ************** New Car ************** ");

Console.WriteLine("CarIdtMaketColortPet Name");

Console.WriteLine($"{newCar.Id}t{newCar.Make}t{newCar.Color}t{newCar.PetName}");

dal.DeleteCar(newCar.Id);

var petName = dal.LookUpPetName(car.Id);

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Console.WriteLine(" ************** New Car ************** ");

Console.WriteLine($"Car pet name: {petName}");

Console.Write("Press enter to continue...");

Console.ReadLine();

Понятие транзакций базы данных

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

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

1. Банк должен снять $500 с вашего депозитного счета.

2. Банк должен добавить $500 на ваш текущий чековый счет.

Вряд ли бы вам понравилось, если бы деньги были сняты с депозитного счета, но не переведены (из-за какой-то ошибки со стороны банка) на текущий чековый счет, потому что вы попросту лишились бы $500. Однако если поместить указанные шаги внутрь транзакции базы данных, тогда СУБД гарантирует, что все взаимосвязанные шаги будут выполнены как единое целое. Если любая часть транзакции откажет, то будет произведен откат всей операции в исходное состояние. С другой стороны, если все шаги выполняются успешно, то транзакция будет зафиксирована.

На заметку! Из литературы, посвященной транзакциям, вам может быть известно сокращение АСЮ. Оно обозначает четыре ключевых характеристики транзакций: атомарность (atomic; все или ничего), согласованность (consistent; данные остаются устойчивыми на протяжении транзакции), изоляция (isolated; транзакции не влияют друг на друга) и постоянство (durable; транзакции сохраняются и протоколируются в журнале).

В свою очередь платформа .NET Core поддерживает транзакции различными способами. Здесь мы рассмотрим объект транзакции поставщика данных ADO.NET (SqlTransaction в случае Microsoft.Data.SqlClient).

В дополнение к готовой поддержке транзакций внутри библиотек базовых классов .NET Core можно также использовать язык SQL имеющейся СУБД. Например, вы могли бы написать хранимую процедуру, в которой применяются операторы BEGIN TRANSACTION, ROLLBACK и COMMIT.

Основные члены объекта транзакции ADO.NET

Все транзакции, которые будут использоваться, реализуют интерфейс IDbTransaction. Как упоминалось в начале главы, интерфейс IDbTransaction определяет несколько членов:

public interface IDbTransaction : IDisposable

{

1 ... 396 397 398 399 400 401 402 403 404 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

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