MVC Projenizde EF Code First ile Çoklu Veri Tabanı Kullanımı


Entity Framework Code First kullanarak geliştirdiğiniz bir MVC projenizde kullanılacak veri tabanı (database) ‘nın kullanıcı tarafından seçilmesi gerekiyorsa..

  • Giriş yapan her kullanıcının önce veri tabanını seçmesi, sonra yönlendirilerek işlem yapması sağlanabilir.
  • Hatta dilerseniz programın herhangi bir anında veri tabanı değişimi yapması sağlanabilir.
  • Giriş yaparken veri tabanı seçmeyerek varsayılan bir veritabanı ile de çalışması sağlanabilir.

Öncelikle şunu belirtmek istiyorum ki, kullanılacak veri tabanlarının hepsinin yapısını aynı olması gerekmektedir. Çünkü veri tabanı sayısı birden fazla ama geliştirdiğimiz EF Code First class’larımız tek olacaktır. Hepsine uygun olarak çalışmalıdır. Eğer benim veri tabanlarımın yapıları farklı diyorsanız, zaten o zaman her veritabanı yapısı için gerekli model class’larınızı ve Context ‘inizi oluşturmalısınız. Kullanacağınız veri tabanına uygun context’den instance oluşturukup kullanılmalıdır.

Veri tabanlarınızın aynı olduğunu varsayarak konuya uygun örnek kodları aşağıda bulabilirsiniz.

Öncelikle iki adet veri tabanını SQL de oluşturuyorum. İkisi de aynı yapıda fakat içindeki veriler göreceğiniz üzere farklıdır.

01-sql-database-a

02-sql-database-b

kmb-udemy-reklam

Şimdi Empty bir ASP.NET MVC projesine Nuget Manager ile Entity Framework ekliyoruz. Ardından Model class’ımız (Employee) ve Context nesnemiz (DatabaseContext) oluşturalım.

03-employees-modal-ve-databasecontext

DatabaseContext class’ında kendi constructor’ımı yazdığımı görebilirsiniz. Instance oluşturma(new keyword’ü ile oluşturma) aşamasında parametre olarak ise dbname isminde context’in çalışacağı veri tabanı adını gönderiyor olacağız. Sonrasında Connection String ifadesini bu parametre (dbname) ile gelen veri tabanı adı ile oluşturuyor olacağız.

İşte bu noktada isterseniz dbname parametresini opsional (optional) yapabilir ve varsayılan (default) bir değer girebilirsiniz. Bu size, DatabaseContext’den instance oluşumu(new keyword’ü ile oluşturma) esnasında dbname parametresini göndermeden de, varsayılan bir veri tabanı ile çalışabilme özgürlüğü verecektir.

Bu ipucunun ardından HomeController oluşumu ve içindeki Index action da veri tabanı seçimini sağlayan ekranı tasarlayacağım. Benim örneğim de başlangıç sayfam olacak. Siz Login sayfanız da veya istediğiniz bir sayfada bu adımı yapabilirsiniz.

Unutmayın! Eğer varsayılan dbname değeri vermediyseniz, bu hazırlayacağım sayfadan veri tabanı seçmeden kullanıcı işlem yapmamalı. Eğer varsayılan değer verdiyseniz kullanıcı doğrudan işlem sayfalarından birine de gidebilir.

04-veritabani-secim-sayfasi-home-index

05-veritabani-secim-sayfasi-post-islemi-kodlari

Home-Index view’ında DropDownList’e verdiğim ismin(“dbname“) controller ‘da Index action’ın POST metodunda aynı isimli(dbname) parametre olarak verildiğini görebilirsiniz. Böylece Giriş düğmesine basıldığında DropDownList’den seçilen değer elde edilebilecektir. DropDownList’ler ile çalışma hakkında bilgi sahibi olmak için daha önce yazdığım “ASPNET MVC DROPDOWNLİST DOLDURMA YÖNTEMLERİ” isimli makalemi okuyabilirsiniz.

Bu sayfada çalışılacak veri tabanı seçildikten sonra seçilen veri tabanı adı Session’da “dbname” key değeri ile tutulur. Artık kullanıcıyı yönlendirebiliriz.

Kullanıcı EmployeesController’daki Index action’a yönlendirilir. Burada veri tabanından tüm employee verisi çekilerek gösterilir. Veri çekme işleminde bildiğiniz üzere DatabaseContext nesnesinden instance oluşturulması gerekmektedir. Fakat bizim veri tabanı adımız session’da idi. İşte her yerde bu session değerini okuyup context oluşumunu yapan kodu yazmak yerine bunu bir metodun üstlenmesini sağlayalım.

Bu metodu da bir BaseController isimli class’a ekleyerek, bu class’ı Controller ‘dan türetelim. Artık DatabaseContext ‘e ihtiyaç duyduğumuz controller’larımızı bu BaseController’dan türeterek kolayca bu metoda erişmeyi sağlayabiliriz.

06-employee-listesi-ekrani

07-context-olusturma-metodu-iceren-base-controller

08-employee-islemleri-controller

Kodlarımızda Create metodunu da görmüşsünüzdür. Veri girişi işlemini de yapabildiğimizi test etmek için bu ekranı da ve kodları da ekledim. Create view‘ında basit iki adet property’mize(name-ve surname) ait alanımız bulunuyor.

09-employee-create-ekrani

Sonuç olarak aşağıdaki görsel’de de göreceğiniz üzere, yapımız çalışıyor. Projeye buradan ulaşabilirsiniz.

aspnet-mvc-de-ef-code-first-ile-coklu-veritabani-kullanimi

kmb-udemy-reklam

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s