Asp.Net Core uygulamalarında Environment (Ortam) bilgisine göre Database ConnectionString (Veritabanı Bağlantı Cümlesi) belirlemek

Geçen yıl geliştirmeye başladığımız birkaç bin adam/gün sürecek koca bir ERP uygulamasında, Web API projesinin yayınlandığı ortama göre Database ConnectionString‘e (Veritabanı Bağlantı Cümlesi) sahip olması gerekiyordu.

Örneğin, ConnectionString, Development ortamında Development veritabanını, Test ortamında Test veritabanını, Staging ortamında Staging veritabanını, Production ortamında Production veritabanını göstermeliydi.

Eğer Asp.Net Core Web API uygulamasının, çalıştığı ortama göre (Environment) otomatik olarak ConnectionString bilgisini belirlemesini sağlayabilirsem, uygulamanın çeşitli ortamlara yayılması gerektiğinde, ConnectionString‘i güncelleme derdinden kurtulabilirdim.

Hatta, her developerın bilgisayarının isminin de ConnectionString‘te olmasını sağlayabilirsem, aynı anda geliştirme yapan birden fazla developer‘ın, birbirlerinin veritabanı değişikliklerinden etkilenmesini de engelleyebilirdim.

Bunu gerçekleştirmek için, öncelikle projede yeni bir AppDataContext.cs dosyası oluşturdum ve Microsoft.EntityFrameworkCore kütüphanesini kullanarak veritabanını ve tabloları modelledim;

Startup.cs dosyasında yer alan ConfigureServices() methoduna aşağıdaki kodları yazdım;

AddDbContextPool() methodu sayesinde, uygulamada AppDataContext sınıfı her gerektiğinde (Dependency Injection ve IoC - Inversion of Control yöntemleri ile) sağlanacak olan AppDataContext değişkenini yapılandırdım.

Burada dikkat edilmesi gereken nokta, SqlConnectionStringBuilder sınıfı sayesinde, varolan ConnectionString bilgisini değiştirip, yenisini oluşturabiliyoruz.

Environment bilgilerini kullanıp, hatta IsDevelopment() methodu ile gerekirse developer bilgisayarının ismini de kullanıp, yeni ConnectionString ürettim ve bu ConnectionString‘i UseSqlServer() methodu içerisinde kullandım.

Böylece farklı ortamlarda (Environment) ConnectionString aşağıdakiler gibi oldu;

  • Database_Production
  • Database_Test
  • Database_Staging
  • Database_Development_Ahmet
  • Database_Development_Mehmet
  • Database_Development_Ayse

Son olarak, AppConnectionString değişkenini, appsettings.json dosyası içerisinde aşağıdaki gibi tanımladım;

Not : Bu makaleyi yazarken Martin Ullrich‘in makalesinden de faydalandım

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı