Sign In

 

 

Entity Framework 6 ile Oracle DB Code First PratikleriEntity Framework 6 ile Oracle DB Code First Pratikleri752015-10-19T08:55:00Z 19.10.2015 08:55:00Gencebay Demir<div class="ExternalClass11B61D37871B448996FE559EAD09833B"><div>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.</div><div><br></div><div>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.</div><div><br></div><div><a href="https://msdn.microsoft.com/en-us/data/ef.aspx"><span class="ms-rteForeColor-8">Entity Framework</span></a> .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 <a href="https://en.wikipedia.org/wiki/Object-relational_mapping"><span class="ms-rteForeColor-8">O/RM</span></a> kütüphanesidir.</div><div><br></div><div>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 <a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/CodeFirst/index.html"><span class="ms-rteForeColor-8">Oracle tarafından hazırlanan küçük bir eğitim yazısı​</span></a> bulunmasına rağmen teoriğin pratikle buluştuğu noktada alınabilecek aksiyonlar değişiklik göstermektedir.</div><div><br></div><div>Bu kapsamda; ihtiyaç duyulan çözümde Oracle Express <span class="ms-rteForeColor-8">11g Release 2</span> 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.</div><div><br></div><div><br></div><div><strong>ENTEGRASYON</strong></div><div><strong><br></strong></div><div><strong>Server</strong></div><div><strong><br></strong></div><div>- Oracle Express Editon kurulumu için <a href="http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html">11g Release2</a> adresinden paket indirilebilmektedir. Sunucunuzun özelliklerine göre x64 veya x32 olarak tercih edebilirsiniz!</div><div><br></div><div>- 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!</div><div><br></div><div>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) (<a href="http://stackoverflow.com/questions/18403125/how-to-create-a-new-schema-new-user-in-oracle-11g"><span class="ms-rteForeColor-8">Ref Link for Commands</span></a>) Command Promt ile sırasıyla:</div><div><br></div><div><em><strong>sqlplus / as sysdba</strong></em></div><div><em><strong>create user myCustomUser identified by P@ssword1</strong></em></div><div><br></div><div><img src="/blog/PublishingImages/Lists/Posts/AllPosts/SqlPlus-2.PNG" alt="SqlPlus-2.PNG" style="margin:5px;" /><br></div><div><br></div><div>ç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!</div><div><br></div><div>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. (<a href="https://msdn.microsoft.com/en-us/data/jj591621.aspx#sql">Verbose</a>)</div><div><br></div><div>Bu aşamada biz oluşturduğumuz kullanıcıya tüm yetkileri sqlplus üzerinden verebiliriz:</div><div><br></div><div>Command Promt:</div><div><br></div><div><strong><em>$SQL> grant all privileges to myCustomUser;</em></strong></div><div><strong><em><br></em></strong></div><div>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.</div><div><br></div><div>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!.</div><div><br></div><div>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 !!!)</div><div><br></div><div>Tabloları migration kullanmadan <a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html"><span class="ms-rteForeColor-8">veri tabanı yönetim sistemi aracıyla (Sql Developer)</span></a> 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.)</div><div><br></div><div><br></div><div><strong>Client</strong></div><div><br></div><div>- ConnectionString ve DataSource ayarlarının tam olarak yapıldığından emin olunuz! Bunun için öncelikle <a href="http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html"><span class="ms-rteForeColor-8">Oracle-ODAC</span></a> adresinden ODAC 12c Release 4 and Oracle Developer Tools for Visual Studio (12.1.0.2.4) kurulumunun gerçekleştirilmesi gerekmektedir.</div><div><br></div><div><strong><em>C:\<oracleInstallationPathRoot>\client\<username>\product\12.1.0\client_1\ </em></strong></div><div><br></div><div>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.</div><div><br></div><div>- Aşağıda belirtilen yol ile tnsnames.ora isimli dosya üzerinde;</div><div><br></div><div><strong><em>C:\<oracleInstallationPathRoot>\client\<username>\product\12.1.0\client_1\Network\Admin\tnsnames.ora </em></strong></div><div><br></div><div>dataSource tanımlamaları yapılabilmektedir.</div><div><br></div><div>Örnek;</div><div><br></div><div><strong><em><data source alias> =</em></strong></div><div><strong><em>  (DESCRIPTION =</em></strong></div><div><strong><em>    (ADDRESS = (PROTOCOL = TCP)(HOST = <hostname or IP>)(PORT = <port>))</em></strong></div><div><strong><em>    (CONNECT_DATA =</em></strong></div><div><strong><em>      (SERVER = DEDICATED)</em></strong></div><div><strong><em>      (SERVICE_NAME = <database service name>)</em></strong></div><div><strong><em>    )</em></strong></div><div><strong><em>  )</em></strong></div><div><br></div><div>​​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.</div><div><br></div><div><img src="/blog/PublishingImages/Lists/Posts/AllPosts/OracleCodeFirstArticle-2.PNG" alt="OracleCodeFirstArticle-2.PNG" style="margin:5px;" /><br></div><div><br></div><div><img src="/blog/PublishingImages/Lists/Posts/AllPosts/OracleCodeFirstArticle-3-1.PNG" alt="OracleCodeFirstArticle-3-1.PNG" style="margin:5px;" /><br></div><div><br></div><div>- Resmi <a href="https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/"><span class="ms-rteForeColor-8">Oracle ODP.NET, Managed Entity Framework Driver​</span></a> 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.</div><div><br></div><div><img src="/blog/PublishingImages/Lists/Posts/AllPosts/OracleDataAccess.PNG" alt="OracleDataAccess.PNG" style="margin:5px;" /><br></div><div><br></div><div>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 <a href="https://en.wikipedia.org/wiki/Integrated_development_environment"><span class="ms-rteForeColor-8">IDE</span></a>'sinin başında halledebilmenin keyfini sürebilir!</div><div><br></div><div>Oracle Provider ı tarafından belirlenen <a href="http://www.oracle.com/technetwork/topics/dotnet/downloads/odpnet-managed-nuget-121021-2405792.txt"><span class="ms-rteForeColor-8">limitler ve sık karşılaşılan konular​</span></a> incelenerek olası çözümler değerlendirilebilir.</div><div><br></div><div>Tüm geliştirici arkadaşlara faydalı olması dileğiyle!</div></div>entity-framework-6-ile-oracle-db-code-first-pratiklerihttps://www.bilgeadam.com/blog/Lists/Photos/PostImages/entity-framework.jpgBir 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. bluePROYazılım

Yazara Soru Sor




SORU GÖNDER