Чтобы задействовать AutoLot.Dal, замените код метода Main() показанным далее кодом:
InventoryDal dal = new InventoryDal();
List
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();
Понятие транзакций базы данных
Давайте завершим исследование ADO.NET рассмотрением концепции транзакций базы данных. Выражаясь просто,
Транзакции также важны в ситуациях, когда операция базы данных включает в себя взаимодействие с множеством таблиц или хранимых процедур (либо с комбинацией атомарных элементов базы данных). Классическим примером транзакции может служить процесс перевода денежных средств с одного банковского счета на другой. Например, если вам понадобилось перевести $500 с депозитного счета на текущий чековый счет, то следующие шаги должны быть выполнены в транзакционной манере.
1. Банк должен снять $500 с вашего депозитного счета.
2. Банк должен добавить $500 на ваш текущий чековый счет.
Вряд ли бы вам понравилось, если бы деньги были сняты с депозитного счета, но не переведены (из-за какой-то ошибки со стороны банка) на текущий чековый счет, потому что вы попросту лишились бы $500. Однако если поместить указанные шаги внутрь транзакции базы данных, тогда СУБД гарантирует, что все взаимосвязанные шаги будут выполнены как единое целое. Если любая часть транзакции откажет, то будет произведен откат всей операции в исходное состояние. С другой стороны, если все шаги выполняются успешно, то транзакция будет