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

InventoryDal dal = new InventoryDal();

List list = dal.GetAllInventory();

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

Console.WriteLine("Id\tMake\tColor\tPet 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("CarId\tMake\tColor\tPet 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("CarId\tMake\tColor\tPet Name");

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

dal.DeleteCar(newCar.Id);

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

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

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

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

Console.ReadLine();

<p id="AutBody_Root865"><strong>Понятие транзакций базы данных</strong></p>

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

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

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

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

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

Перейти на страницу:

Похожие книги