Entity Freamwork & ADO.Net



Benzer belgeler
VERİ TABANI ve YÖNETİMİ

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

«BM364» Veritabanı Uygulamaları

Üst Düzey Programlama

Asp.Net Veritabanı İşlemleri

Veritabanı İşlemleri

1-) Veritabanımıza bağlanmak için bir SqlConnection nesnesi, 2-) Veritabanındaki bilgileri kullanmak (seçme, kaydetme, silme, güncelleme) için

ADO.NET. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

Veritabanı Tasarımı. Veritabanı Hareketleri

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

SQL TRIGGERS (Tetikleyiciler)

Tavsiye Edilen Önhazırlık Temel SQL Server 2000 bilgisi edinmek.

VERİ TABANI YÖNETİM SİSTEMLERİ II. 9. FORMLAR ve ORACLE FORMS PROGRAMINDA FORM OLUŞTURMA

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

Üst Düzey Programlama

Ortak Zamanlılık ve Veri Hareketi (Data Transaction)

PostgreSQL ve PL/pgSQL

Ortamınızda A.D. veya LDAP sistemi var ise aşağıdaki linkten KoruMail LDAP-AD isimli dokümanı inceleyebilirsiniz.

«BM364» Veritabanı Uygulamaları

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

OTURUM AÇMA ADLARI. Tavsiye Edilen Önhazırlık Enterprise Manager'i kullanabilmek.

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

1.adım : Sql serverda Stored procedure oluşturmamız gerekiyor. Şu adımları izliyoruz.

Oracle da kullanılan veri tipleri:

İnternet Programcılığı

ADO.NET VERİTABANINA BAĞLANTI. Bir web formu üzerinden veritabanına bağlantımızı anlatacağım. UYGULAMA 1

Transaction ve Ortak Zamanlılık. Sibel SOMYÜREK

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

Veri Bütünlüğü ve Constraint ler. Veritabanı 1

Bölüm 4: DDL Veri Tanımlama Dili

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı.

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Öğr. Gör. Serkan AKSU 1

Microsoft SQL Server Sorgulama

Veri Tabanı-I 1.Hafta

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

İLİŞKİSEL VERİTABANLARI

1 Temel Kavramlar. Veritabanı 1

VERİTABANI ve YÖNETİMİ

İngilizce'de Relational Database Management System (RDBMS) olarak ifade edilir.

2-Veritabanı Yönetim Sistemleri/ Temel Kavramlar

Bölüm 10: PHP ile Veritabanı Uygulamaları

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Tavsiye Edilen Önhazırlık Temel veritabanı kavramlar hakkında bilgi sahibi olmak. Hedefler Temel veritabanı güvenlik işlemlerini gerçekleştirebilmek

PostgreSQL ve PL/pgSQL

VERİ TABANI YÖNETİM SİSTEMLERİ

Kets DocPlace LOGO Entegrasyonu

Masa üstünde vt34.mdb dosyası var, onu projemize eklemek için, App_Data ya sağ tıkla Add Existing Item vt34.mdb adlı dosyayı seç Add

Microsoft SQL Server 2008 Oracle Mysql (Ücretsiz) (Uygulamalarımızda bunu kullanacağız) Access

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

SQL e Giriş. Uzm. Murat YAZICI

İNTERNET PROGRAMCILIĞI DERSİ

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

BlackBerry Admin Service

VERİ TABANI UYGULAMALARI

PHP 1. Hafta 2.Sunum

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.


4. Bölüm Programlamaya Giriş

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

DESTEK DOKÜMANI. Tablolu Malzeme Sınıfları

Swing ve JDBC ile Database Erişimi

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

Veri Tabanı-I 5.Hafta

STORED PROCEDURE LER (Saklı Yordamlar)

Sunum İçeriği. Programlamaya Giriş

LINQ Language Integrated Query Dille Bütünleştirilmiş Sorgu Bir Veri Tabanı Tablosundan Veri Gösterme

BİLİŞİM TEKNOLOJİLERİ

VeriTabanı Uygulamaları

FIRAT ÜNİVERSİTESİ WEB TABANLI KÜTÜPHANE OTOMASYONU

BÖLÜM- 9: KULLANICI ERİŞİMLERİNİ YÖNETMEK

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

VERİ TABANI YÖNETİM SİSTEMLERİ I

FIRAT ÜNİVERSİTESİ ENFORMATİK LABORATUVARLARI OTOMASYONU

PostgreSQL Veritabanı Sunucusu. HOT, VACUUM ve BGWRITER

1.PROGRAMLAMAYA GİRİŞ

TESİ. indeks. söylenebilir?? bir ilişkidir d) Hiçbiri. veya somutlaştırılmış. düzeyidir? sağlayabilir? sına. d) Hepsi. olabilir? c) Verilerin d) Hepsi

Disk tabanlı bir çözümdür ve bu yapısından dolayı kullanılması kolaydır. Ayrıca hızlı bir şekilde yedekleme ve geri dönüş sağlar.

EXISTS VE NOT EXISTS fonksiyonları

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

1 Nisan Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Stok

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

C Sharp /Veri tabanı işlemleri

1. Oracle Data Miner 11g Release 2 Kurulumu Aşamaları

1 Temel Kavramlar. Veritabanı 1

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

ORM & Hibernate. Ahmet Demirelli. SCJP 5.0, SCWCD 1.4 ahmetdemirelli@sabanciuniv.edu

Basit bir web uygulaması

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

Transkript:

Entity Freamwork & ADO.Net Yapılan Çalışma Entity framework 6.0 da TransactionScope vs Ado.Net Transaction Melih Hilmi ULUDAĞ

İçindekiler Tablosu 1.Giriş... 3 1.1 Transaction un kullanımı (MS Sql Server de)... 3 2. Transaction ve TransactionScope Yapısı... 6 2.1.LightWeight Transaction Modeli... 6 2.2. OleTx Transaction Modeli... 10 3.Sonuç... 15

1.Giriş Transaction kelime olarak işlem anlamına gelmektedir. Programlama da ise daha küçük parçalara ayrılmayan en küçük işlem yığınına denir. Programlama da bir dize işleminin tamamının yolunda gitmesine bağlı durumlarda transaction kullanılır. Kısaca transaction bloğu ya hep ya hiç mantığı ile çalışır. (Tüm işlemler düzgün olarak yolunda gitse, sadece bir kısmı geçersiz olsa tüm blok geçersiz sayılır) Sözel bir örnek: Bir kullanıcı olarak ATM ye gittiniz diyelim, yapmak istediğiniz işlem para çekmek olsun. Kartınızı taktınız, şifrenizi girdiniz, para çekmeyi seçtiniz, miktarı belirlediniz ve çekmek istiyorum dediniz. ATM arka planda tüm bu işlemleri yaptı, çekmek istediğiniz para miktarını kontrol etti, paranın var olduğunu gördü, paranızı size vermek üzere para çekilecek Alana yansıttı. Kartınızı da daha önceden verdi (artık genelde önce kart, sonra para veriliyor çünkü, parayı unutma ihtimali daha az mantığı ile bakılıyor olaya) Bu esnada arka planda hesabınızdan bu miktar düştü. Para şimdi parayı alacağınız alanda ama olduki dalgınlık oldu, hemen alamadınız bir kaç saniye geçti ve bankamatikte güvenlik icabı bu parayı geri aldı. Yani parayı hesaptan çektiniz ama elinize alamadınız para geri gitti.eeee ne olacak şimdi, benim hesabımdaki para azalacak mı? Ben parayı almadım ki daha İşte burada Transaction işleminin önemi devreye giriyor. Kullanıcı parasını alamadığı için Transaction sonlanmamış olur ve her şeyi eski haline geri çevirir. Yani çekilen miktar tekrar kullanıcının hesabına geri döner. Transaction işleminin önemi budur. Aynı durumu bankaya para yatıran bir şahıs içinde düşenebilirsiniz. Banka önce yatırılacak miktarı sorar, sonra kullanıcıdan parayı ister, tüm işlemler sonlandığında yani en son onay alındığında işlem aslında tamamlanmış olur. 1.1 Transaction un kullanımı (MS Sql Server de) Begin Tran (veya Transaction)...... Commit Transaction

Şeklinde bir kullanıma sahiptir. ( ) olan kısımlara birbirleriyle aynı anda gerçekleşme şartı olan kodlar yazılır. Örnek: Yukarıda verilen örneği açıklamaya yönelik MS SQL Server de bir uygulama yapalım. Adım1: trandenemesi adlı bir tablo oluşturdum ve sutun1 adlı bir kolona sahip olsun dedim. cevabı ile işlemin başarılı olduğunu görüyorum. Adım2: Begin tran/commit tran blokları arasına yazdığım 3 satır kod ile trandenemesi adlı tablonun sutun1 kolonuna 3 adet sayısal (int tipinde) değer eklemesi yaptım. Ve Sql Server, olumlu mesaj verdi.

Kayıtlara göz attığımda 3 adet değerinde sorunsuz şekilde eklendiğini görüyoruz. Adım3: Burada ise 2 tane sayısal 1 tane de sözel bir veri ekleme isteğinde bulundum. Mesajda ilk 2 sinin olumlu sonuçlandığını diğerinin de int veri türüne dönüştürülmediğinden eklenemediği mesajını gördük. Tekrar tabloyu listelediğimde ilk ikisinin olumlu olmasına ragmen eklenmediğini görüyoruz. Bunun sebebi transaction içerisinde son satırın eklenememesiydi. Transaction kavramında ya hep yaa hiç mantığı olduğundan son satır eklenemediği için ilk iki satırı da işleme almıyor. Transaction, bu mantıkta geliştirilmiş bir yapıdır.

2. Transaction ve TransactionScope Yapısı Transaction yapısı sadece Ado.Net üzerinde değil, tüm data accessing teknolojileri üzerinde bulunmaktadır. Ve bulunmak zorundadır. (Transaction Nhibernate üzerinde de vardır, Entity Freamwork üzerinde de.) ADO.NET 2.0 ile birlikte programcının yerel ve dağıtık transaction işlemlerini daha kolayca yönetebilmesi için System.Transactions.dll kütüphanesi sunulmuştur. ADO.NET 2.0 da LightWeight Transaction(LT) ve OLE Transaction(OleTx) olmak üzere iki transaction modeli geliştirildi. 2.1.LightWeight Transaction Modeli Tek veri kaynağı üzerinde sorgulama yapılırken kullanılan transaction modeli, var sqlconnectionnesnesi=new SqlConnection( bağlantı cümleciği yazılacak ); Connection nesnesi oluşturulur. sqlconnectionnesnesi.open(); Bu nesneyi kullanabilmek için etkinleştirmek/açmak gerekiyor. SqlTransaction trannesnesi=sqlconnection.begintransaction(); Transaction nesnesi oluşturulur ve connection nesnesi üzerinde bu nesneye atama işlemi yapılmış olunur. var cmd=new SqlCommand( sql komutu yazılır, sqlconnectionnesnesi); cmd nesnesine sql komutu atanır. cmd.transaction=trannesnesi; cmd nesnesinin transaction u yukarıda tanımlanan trannesnesi olsun diyerek cmd nesnesinikişiselleştirmiş oluyoruz. try{ cmd.executenonquery(); cmd nesnesi içerisindeki sql komutunu aktifleştiriyoruz.

trannesnesi.commit(); Eğer try bloğu içerisinde hata meydana gelmezse commit ediyoruz yani veritabanına değişiklikler yansısın diyoruz. } catch(exception hata){ trannesnesi.rollback(); Bu ifade ile transaction nesnesinde yapılan tüm işlemleri gerialıyoruz. Çünkü bu blok çalışıyorsa bir hata meydana gelmiş demektir. } Örnek Uygulama: Resim1. Visual Studio da C# Ado.Net ile transaction örneği

İşlem Sonucu: Resim2. MS Sql Server de oluşan değişiklik sonucu (bdrsayisi ve bbutcedegeri alanlarına veri girilmedi. Server üzerinde ilgili birimde trgigger ile hesaplanarak very giriliyor. ) Bu işlemi TransactionScope sınıfını kullanarak daha az kodla gerçekleştirebiliriz. Transaction işlemini başarılı olduğunda işlemleri kalıcı yapmak için TransactionScope sınıfının Complete() metodu kullanılır. TransactionScope nesnesinin kullanım biçimi şu şekildedir; Öncelikle aşağıdaki gibi projemize Solution Explorer-Add-Reference yolunu izleyerek System.Transactions.dll dosyasını ekleyelim ki Transaction yönetimi için TransactionScope sınıfını kullanabilelim.

Resim3. ReferenceManager ile dll import etme Resim4. TransactionScope kullanımı

Resim5. TransactionScope ile yapılan sql işlemi sonucu Aynı şekilde iki farklı Command nesnesini de transaction yönetimine alabiliriz. Bu örnekte tek veri kaynağı üzerinde işlem yapıldığı için LightWeight Transaction tipi kullanılmış oldu. TransactionScope nesnesinin asıl kolaylığını OleTx Transaction tipi üzerinde görmek mümkün. Aşağıdaki örnekte iki farklı veritabanı sunucusu üzerinde işlem yapılarak dağıtık transaction ortamı oluşturulmuştur. İki farklı veritabanı sunucusu üzerinde işlem yapıldığı için ADO.NET, programcının ek birşey yapmasına fırsat vermeyerek bu işlem dağıtık transaction yöntemini kullanacaktır. 2.2. OleTx Transaction Modeli Bu ise dağıtık transaction yapısında olup ayrı veri kaynakları üzerinde işlem yapılırken kullanılan modeldir.

Resim6. OleTx Transaction modeli Dağıtık transaction işlemleri Microsoft Distributed Transaction Coordinator(MSDTC) tarafından yönetilir. Bu servisi doğru bir şekilde yapılandırdıktan sonra aynı application domain içerisindeki iki farklı sunucu bağlantısı üzerinde etkin bir transaction yönetimi gerçekleştirmiş oluruz. DTC, her iki veritabanı sunucu üzerindeki DTC lerden işlemleri doğru yapılıp yapılmadığına dair geri bildirim bekler. Gelen sonuç olumluysa TransactionScope nesnesi, Complete() edilir. Görüldüğü gibi ADO.NET 2.0 daki bu özellik, programcının COM+ programlamayla uğraşmasına gerek kalmadan System.Enterprise servislerini kullanmadan dağıtık transaction işlemini daha az kodla kolaylıkla ve daha performanslı gerçekleştirmeyi sağlamıştır. TransactionScope sınıfının constructor ü overload edilmiş olup aktif transaction ın davranış biçimini ve zaman aşım süresini parametre olarak alır. Bu parametreler

daha çok iç içe kullanılmış transaction(nested transaction) yönetiminde işlev kazanmaktadır. Nested transaction, bir transaction nın başarıyla sonuçlanması için başka bir transaction ın başarıyla bitmesini beklemesidir. ADO.NET ile bu içiçe hareket işlemleri de kolaylıkla yapılabilmektedir. Nested transaction, direk veya dolaylı yapılabilir. TransactionOptions sınıfı kullanılarak transaction bloğu için izolasyon seviyesi ve zaman aşımı süresi de tanımlanabilir. Aynı zamanda nested transaction işleminde içteki transaction blokları için hangi scope da etkili olacağını belirleyebiliriz. Bunun için TransactionScopeOption enum u kullanılır. IsolationLevel, kullanıcı işlemlerin veya başka transaction ın o anki transaction a olan duyarlılığını yani aktif transaction çalışırken diğer transaction ların aktif transaction yönetimindeki verilere nasıl davranacağını bildirir. Transaction daki izolasyon seviyeleri (Isolation Level), aynı verilere yapılan ortak zamanlı erişim sorunlarını çözmek için kullanılır. Burada bu seçeneklerle ilgili bir iki cümle yazmak faydalı olacaktır. Chaos: Değiştirmeye çalıştığımız veriler üzerinde başkası güncelleme yapıyorsa bizim değiştirmemize izin verilmez. Bu seçenek, SQL Server tarafından desteklenmemektedir. ReadCommited: Okumaya çalıştığımız veriler üzerinde o anda başkası

güncelleme yapıyorsa o kişinin ancak COMMIT veya ROLLBACK ettiği verilerini okuyabiliriz. Örneğin bir tablodaki X satırını okuduk ve okuma transaction u açık bıraktık. Bu arada başka bir transaction bu satırı güncelledi fakat COMMIT etmedi. Bu durumda okuma transaction ı aynı satırı okumaya çalıştığında hata oluşur(dirty Read sorunu). Transaction işlemi, default olarak ReadCommited seçeneğine sahiptir. ReadUncommited: En düşük isolation seviyesi olup diğer transaction ların henüz COMMIT edilmemiş verilerini de okuyabilmeyi sağlar. İkinci transaction tarafından yapılmış değişikliklerin birinci transaction tarafından okunabilmesi için ikinci transaction ın COMMIT veya ROLLBACK yapması beklenmez. Yani önceki seçenekte bahsettiğimiz Dirty Read durumuna onay verir. RepeatableRead: Diğer transaction lara ait COMMIT edilmiş verilere erişilir ancak veriler okunurken diğer kullanıcıların o veriler üzerinde değişiklik yapmasını engeller. Yani SELECT işlemi çalışırken o anda başka bir kullanıcının UPDATE, DELETE işlemi yapması engellenir fakat INSERT yapmasına izin verilir. Serializable: En yüksek isolation seviyesi olup verileri okurken veritabanını kilitleyerek diğer kullanıcıların hiçbir şekilde hiçbir ekleme, güncelleme yapmaması sağlar. Bir transaction ın ekleme, güncelleme, silme yapabilmesi için aktif transaction ın bitmesini bekler. UPDATE, DELETE, INSERT işlemi yapılırken hiçbir şekilde o anda başka bir kullanıcı aynı verileri SELECT edemez. Bu seçenek, performans açısından tercih edilmez ve aktif transaction uzun sürdüğü zaman deadlock denilen ölümcül kilitlenme sorunu yaşanabilir. Diğer konu, iç içe olan transaction bloklarının faaliyet alanlarının belirlenmesidir. Bunun içintransactionscopeoption seçenekleri kullanılır. Bu seçenekler, içteki transaction ın üstteki transaction ın scope ına eklenip eklenmeyeceğini bildirir; Required: Varsa önceki transaction a(ambient Transaction) ait scope a ekler yoksa yeni bir scope yaratır. Yani daha önce oluşturulmuş bir transaction varsa yeni işlemi o transaction a dahil eder yoksa yeni bir transaction başlatır. RequiresNew: Yeni bir transaction scope yaratır varsa öncekini askıya alır. Root scope kendisi olmuş olacak.

Suppress: Herhangi bir transaction içerisine dahil etmez. Resim7. EntityFreamwork6.0 da TransactionScope kullanımı

3. Sonuç Ele aldığımız gibi basit veritabanı modellerinin söz konusu olduğu durumlarda Transaction kullanımına dikkat edilmemesi muhtemel olabilir. Hatta gerekmeyebilir. Nitekim Transaction oluşturmanın da veritabanı kaynağı üzerinde bir maliyeti vardır. Ancak Enterprise seviyedeki uygulamalar ve kullandıkları veritabanı sistemleri ile karmaşık ve bütünlüğü önem arz eden iş kuralları söz konusu olduğunda, TransactionScope kullanımına ciddi anlamda dikkat edilmesi gerekmektedir. Tabi bilindiği üzere TransactionScope nesne örneği üzerinden yapılabilecek farklı ayarlamalar da söz konusudur. Araştırmalar sonucu gördüğüm tavsiyelerde, söz konusu farklı sunucular veya SQL Instance ları üzerindeki n sayıda veritabanında ele alacak şekilde değiştirmeniz ve gözlemlemenizdir. 4. Kaynaklar o stackoverflow.com o msdn.microsoft.com/en-us/library/ o simpleisbest.net o codeproject.com o buraksenyurt.com o ismailgursoy.com.tr o ahmetkaymaz.com