Saturday, October 7, 2017

ProjectBase ile Veri Tabanı İşlemleri (Transaction Örneği)

"ProjectBase" kütüphanesi otomatik transaction yönetimi ve connection yönetimi yapmaktadır. Veritabanı erişim sınıfları 3 modda çalışmaktadır. Bunlar:

* AutoConnectionManagement
* ManuelConnectionManagement
* TransactionMode

Veri tabanı erişim sınıfları ön tanımlı olarak "AutoConnectionManagement" modda çalışmaktadır. Bu modda klasik olarak her işlemde bağlantı açılıp işlem sonlandığında bağlantı kapatılmaktadır. Bu yöntem sıralı işlemlerde yavaş çalıştığından "ManuelConnectionManagement" modunda bağlantının ne zaman açılıp kapanacağı yazılımcı tarafından yönetilerek performans kazanımı yapılabilmektedir. TransactionMode ise PL/SQL tipinde kod yazımı için geliştirilmiştir.

Aşağıdaki örnekte TransactionMode kullanılarak nasıl işlem yapılacağı gösterilmiştir:

using (IDatabase2 db = DatabaseFactory.GetDbObject(DbSettings.TransactionMode))
{
    //salary = 24000

    db.ExecuteQuery("update employees set salary = 3000 where employee_id = 100 ");
    db.Commit();

    //salary = 3000 oldu

    db.ExecuteQuery("update employees set salary = 5000 where employee_id = 100 ");
    db.Commit();

    //salary = 5000 oldu

    db.ExecuteQuery("update employees set salary = 6000 where employee_id = 100 ");
    db.ExecuteQuery("update employees set manager_id = 101 where employee_id = 100 ");
    db.Commit();

    //salary = 6000 ve manager 101 oldu

    db.ExecuteQuery("update employees set salary = 10000 where employee_id = 100 ");
    db.ExecuteQuery("update employees set manager_id = null where employee_id = 100 ");
    db.RollBack();

    //salary = 6000 ve manager 101 kaldı

    db.ExecuteQuery("update employees set salary = 24000 where employee_id = 100 ");
    db.ExecuteQuery("update employees set manager_id = null where employee_id = 100 ");
    db.Commit();

    //salary = 24000 ve manager null oldu

    db.ExecuteQuery("update employees set salary = 50000 where employee_id = 100 ");

    throw new Exception("Fatal Error!");

    //Son işlem geri alındı.
}

Yukarıda görüldüğü gibi veri tabanı erişim sınıfı  transaction yönetimini otomatik olarak gerçekleştirdi. Yani yukarıdaki kod incelendiğinde 6 tane transaction otomatik olarak oluşturulmuş ve işlenmiştir. Veri tabanı erişim sınıfı ön tanımlı olarak hata olması durumunda rollback yapmaktadır. Bu yüzden son işlem geri alınmıştır.

"Bu yazıda "Oracle Managed Provider", Oracle 11g Express Edition ve HR şeması test verileri kullanılmıştır."

"https://github.com/vyigity/ProjectBase"

No comments:

Post a Comment