Entity Framework 6 ile Oracle DB Code First Pratikleri
Entity Framework 6 ile Oracle DB Code First Pratikleri
Bir veri tabanı yönetim sistemini ayrıcalıklı kılan kabiliyetleri ve müşteri gereksinimlerini karşılayabilecek özellikleri barındırmasıdır. Bu nedenle geliştiricilerin farklı veri tabanı yönetim sistemleri veya programlama dillerinin özellik ve kabiliyetlerini yakından incelemesi, sorgulayıcı bir yaklaşım ile etkin çözümler üretmesi büyük önem taşımaktadır. Böylece; temelleri atılan bir projenin verimliliğini veya yeni bir girişimin hayata geçirilmesini, bu teknik donanımın sağladığı bilgi – tecrübe ikilisinin doğru zamanda ve yerde kullanılması belirlemektedir.
Tüm bu kazanımlar geliştiricilere yeni fırsatların yanı sıra daha ağır sorumlulukları da beraberinde getirmektedir. Atılan her adımın, tercih edilen teknoloji ve altyapının, geliştirilen her katman ve modülün sizden sonrakiler için uygun seviyede sürdürülebilir olması tüm yaptıklarınızı taşlara kazımanız gereken anlar olarak ortaya çıkmaktadır.
Entity Framework .NET geliştiricilerinin yakından bildiği ve bir çok veri tabanı ile uyumlu bir şekilde çalışabilen, geliştirme süreçlerinde modellerin veri tabanı sistemlerinden ve bağımlılıklarından ayrıştırılmasını sağlayan popüler birO/RM kütüphanesidir.
Senaryosal bir yaklaşım ile veri tabanı sistemi Oracle olarak tercih edilmiş kurumsal bir uygulamanın Code First yaklaşımı kullanılarak hızlı ve etkin bir şekilde ayarlanması, .NET geliştirme sistemine adaptasyonunu değerlendirelim. İnternette bu konu ile ilgili içerik sayısı pek fazla değil ancakOracle tarafından hazırlanan küçük bir eğitim yazısı bulunmasına rağmen teoriğin pratikle buluştuğu noktada alınabilecek aksiyonlar değişiklik göstermektedir.
Bu kapsamda; ihtiyaç duyulan çözümde Oracle Express11g Release 2 tercih edilmiştir. 10.2 versiyon ve üstü için EF 6 ve Code First yapısının desteklendiği Oracle tarafından belirtilmektedir.
ENTEGRASYON
Server
– Oracle Express Editon kurulumu için11g Release2 adresinden paket indirilebilmektedir. Sunucunuzun özelliklerine göre x64 veya x32 olarak tercih edebilirsiniz!
– Geliştirme odaklı ve geliştirici dostu bir veri tabanı sisteminin entegrasyonu için, kod bilginiz ile koşacağınız bu kısmı basit bir kaç PL-SQL kodu ile çözebiliriz!
Bu aşamada geliştirme odaklı kurduğumuz veri tabanı sunucusunda bir kullanıcı oluşturmamız gerekmektedir. Environment bileşenlerine eklenmiş olan SqlPlus.exe (Sunucu tarafında Oracle 11g nin kurulduğu dizin ve İstemci tarafında ise ODAC Client’ın kurulu olduğu dizin) (Ref Link for Commands) Command Promt ile sırasıyla:
sqlplus / as sysdba
create user myCustomUser identified by P@ssword1
çalıştırılmalıdır. Bu iki komut sonrasında veri tabanında myCustomUser isimli bir kullanıcı belirttiğimiz şifre ile oluşturulacaktır. Bu adımlardan sonra asıl önemli konu; tanımlanan kullanıcının EF Code First Migration süreçlerini düzgün yönetebilmesi!
Test ve geliştirme amaçlı kurduğumuz bu veri tabanı sunucumuzda oluşturduğumuz kullanıcıya Create, Drop, Session vb bir çok rol atamamız gerekmektedir. Özellikle migration komutlarını Visual Studio PM konsolundan yönetirken yetersiz yetki uyarılarını gözlemlemek ve tüm bu süreçlerin altında olan bitenleri kavramak büyük önem taşımaktadır. (Verbose)
Bu aşamada biz oluşturduğumuz kullanıcıya tüm yetkileri sqlplus üzerinden verebiliriz:
Command Promt:
$SQL> grant all privileges to myCustomUser;
Burada amaç migration esnasında create veya drop table komutlarının ve script lerin çalıştırılmasının yanı sıra, Identity (Auto Increment) create edilebilmesi için Trigger veya Schema yönetimi için de ekstra yetkilere ihtiyaç duyulmasıdır.
Aksi takdirde MigrationHistory tablosu create edilememektedir. Code First Migration süreçlerinin (Create – Drop – Update – Seed) doğru ilerleyebilmesi amacıyla MigrationHistory tablosunun oluştuğundan emin olmanız gerekmektedir!.
Muhtemel karşılaşılacak hata ise; “ORA-00955 name is already used by an existing object Error when Update-Database Code First Migration” olacaktır. Bu da DB de var olan bir tablo yada nesne nin tekrar oluşturulmaya çalışılmasına sebep olan hatanın dönüşüdür. (_MigrationHistory tablosu yok ise !!!)
Tabloları migration kullanmadanveri tabanı yönetim sistemi aracıyla (Sql Developer) siler veya değiştirirseniz sadece tabloyu silmeniz veya değiştirmeniz yeterli olmayacaktır. MigrationHistory yapısı bu noktadan itibaren kontrolden çıkabilmektedir. Identity (Auto Increment) için oluşturulan Sequence(s) veya Trigger(s) içinde aynı tip hatalar alınabilmektedir. (Örnek execution script – create sequence “SampleSchema”.”SQ_Tablename” yine yukarıda bahsedilen “name is already used by an existing object” hatası ile karşılaşılmaktadır.)
Client
– ConnectionString ve DataSource ayarlarının tam olarak yapıldığından emin olunuz! Bunun için öncelikleOracle-ODAC adresinden ODAC 12c Release 4 and Oracle Developer Tools for Visual Studio (12.1.0.2.4) kurulumunun gerçekleştirilmesi gerekmektedir.
C:clientproduct12.1.0client_1
Kurulum yolu için önerilen yapı yukarıda belirtildiği şekildedir. Burada oracleInstallationPathRoot değişkeninin OracleX86 veya OracleX64 olarak ayarlanması mimarinin ihtiyaç duyduğu kütüphaneleri ileride daha etkili yönetmenizi sağlayacaktır.
– Aşağıda belirtilen yol ile tnsnames.ora isimli dosya üzerinde;
C:clientproduct12.1.0client_1NetworkAdmintnsnames.ora
dataSource tanımlamaları yapılabilmektedir.
Örnek;
=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = )
)
)
Dosya ihtiyaç duyulan şekilde ayarlandığında Visual Studio Server Explorer ekranından Data Connections Add Connection ile tnsnames.ora’da belirtilen DataSource seçilmek suretiyle bağlantının sağlandığı görülmelidir.
– ResmiOracle ODP.NET, Managed Entity Framework Driver run-time desteği için gerekli olan bu paket migration işlemlerinin yapıldığı kütüphaneye ve uygulamanın kendisine referans olarak eklenmelidir. ODAC 12 Client Design Time için gerekli operasyonların yapılmasında yardımcı olmaktadır.
Bu süreçler tamamlandıktan sonra başka hiç bir ek bileşene gerek duymadan Oracle ile bir yazılım geliştirici derin bağlar kurabilir 🙂 uygulama geliştirme sürecinde veri tabanı ile ilgili işlemleri yine en keyif aldığı yerdeIDE’sinin başında halledebilmenin keyfini sürebilir!
Oracle Provider ı tarafından belirlenenlimitler ve sık karşılaşılan konular incelenerek olası çözümler değerlendirilebilir.
Tüm geliştirici arkadaşlara faydalı olması dileğiyle!