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 seviyide 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 bir O/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 ancak Oracle 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 Express 11g 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çin 11g 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ğanı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ıcya 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 kullanmadan veri 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 öncelikle Oracle-ODAC adresinden ODAC 12c Release 4 and Oracle Developer Tools for Visual Studio (12.1.0.2.4) kurulumunun gerçekleştirilmesi gerekmektedir.

      C:\<oracleInstallationPathRoot>\client\<username>\product\12.1.0\client_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:\<oracleInstallationPathRoot>\client\<username>\product\12.1.0\client_1\Network\Admin\tnsnames.ora 
    

dataSource tanımlamaları yapılabilmektedir.

Örnek;

<data source alias> =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <hostname or IP>)(PORT = <port>))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <database 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 süretiyle bağlantının sağlandığı görülmelidir.

  • Resmi Oracle 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ığı yerde IDE sinin başında halledebilmenin keyfini sürebelir!

Oracle Provider ı tarafından belirlenen limitler ve sık karşılaşılan konular incelenerek olası çözümler değerlendirilebilir.

Tüm geliştirici arkadaşlara faydalı olması dileğiyle!