.Net Core Web Api Çoklu Veritabanı
-
Merhaba arkadaşlar yine bir başka soru ve sorunla sizlerleyim :)
böyle böyle .net core'u öğrenicez valla.
izlediğim ve incelediğim örneklerin tamamında 1 adet veritabanı var ve bu veritabanına yönelik CRUD işlemler yapılıyor.
geliştirmekte olduğum panelde sadece sorgu yapıyor olacağım. fakat birden fazla veritabanı olacak.
ancak veritabanları birbirlerinin aynısı. yani aynı tablo ve colon yapısına sahip. sadece farklı şubelere ait.
yapmakta olduğumuz panelde bu veritabanlarının tamamında sorgu yapmak istiyorum.
hatta mümkünse veritabanları runtime olarak eklenebilsin yani yeni şubeler eklendiğinde ki yeni veritabanı eklenmesi anlamına geliyor bu, backend tarafında tekrar derleme yapmaya gerek kalmasın,
belki veritabanlarının bilgisinin tutulduğu ayrı bi tablo da oluşturulabilir ve connectionstring ler burada tutulabilir.
fakat ben sorgu kısmındayım, bunu nasıl halledeceğim. şuana kadar sorguların tamamını linq de yazdım.
sql query string kullanmak istemiyorum.fikirleriniz için şimdiden teşekkür ederim.
-
Mesela şöyle mi diyorsun
1.2.3.98 ip üzerinde tabloA mevcut
1.2.3.99 ip üzerinde yine tabloA mevcut diyelim.
senin yapman gereken connectionstringi değiştirmek olacaktır.
ef.database.connection vs.. gibi bir kod şeklinde bağlantıyı set edip alabilmektesin. Kafadan yazdım kodu ama benzerdir.
-
dostum şöyle düşün sunucu tek
1.2.3.98 IP li sunucuda
XXX_0101 database
XXX_0602 database
XXX_3402 database lerimiz mevcut (her biri bir bayiye ait veritabanları)tablolar tahmin edeceğiniz üzere aynı
atıyorum database lerin tamamında dbo.customers tablosu var.
ben tek sorguda runtime olarak bu üc databaseden de sorgu yapıp list haline getirip
.net core da return etmem gerekiyor.
-
Asayisci bunu yazdı
dostum şöyle düşün sunucu tek
1.2.3.98 IP li sunucuda
XXX_0101 database
XXX_0602 database
XXX_3402 database lerimiz mevcut (her biri bir bayiye ait veritabanları)tablolar tahmin edeceğiniz üzere aynı
atıyorum database lerin tamamında dbo.customers tablosu var.
ben tek sorguda runtime olarak bu üc databaseden de sorgu yapıp list haline getirip
.net core da return etmem gerekiyor.
Niye farklı db ? Özel bir sebebi var mı ?
-
trooper bunu yazdıAsayisci bunu yazdı
dostum şöyle düşün sunucu tek
1.2.3.98 IP li sunucuda
XXX_0101 database
XXX_0602 database
XXX_3402 database lerimiz mevcut (her biri bir bayiye ait veritabanları)tablolar tahmin edeceğiniz üzere aynı
atıyorum database lerin tamamında dbo.customers tablosu var.
ben tek sorguda runtime olarak bu üc databaseden de sorgu yapıp list haline getirip
.net core da return etmem gerekiyor.
Niye farklı db ? Özel bir sebebi var mı ?
bu projeyi farklı firmalar da kullanıyor tekil olarak.
eğer tüm dataları tek veritabanında toplayacak olsaydım hem komple projeyi elden geçirecektim (her bir tabloya bayiID vs)hemde iki farklı versiyon olacağı için ileriki güncellemelerde 2 defa kod derlemesi yapmak zorunda kalacaktım.
-
Asayisci bunu yazdıtrooper bunu yazdıAsayisci bunu yazdı
dostum şöyle düşün sunucu tek
1.2.3.98 IP li sunucuda
XXX_0101 database
XXX_0602 database
XXX_3402 database lerimiz mevcut (her biri bir bayiye ait veritabanları)tablolar tahmin edeceğiniz üzere aynı
atıyorum database lerin tamamında dbo.customers tablosu var.
ben tek sorguda runtime olarak bu üc databaseden de sorgu yapıp list haline getirip
.net core da return etmem gerekiyor.
Niye farklı db ? Özel bir sebebi var mı ?
bu projeyi farklı firmalar da kullanıyor tekil olarak.
eğer tüm dataları tek veritabanında toplayacak olsaydım hem komple projeyi elden geçirecektim (her bir tabloya bayiID vs)hemde iki farklı versiyon olacağı için ileriki güncellemelerde 2 defa kod derlemesi yapmak zorunda kalacaktım.
Bold yaptığın kısımdan kastın tekil ve şubeli kullanım için mi 2 derleme olacağını düşünüyorsun ?
Bu sorunu yaşamayacak 1 den fazla çözüm düşünülebilir. Bence iyice detaylıca düşünmeden ilk aklına geleni yapıyorsun. Projeyi elden geçirmeyim diye gelecekte ne sorunlar yaşayacağını planlamıyorsun ki bu sorunlarda projeyi elden geçirmekten daha uzun sorunlar karşına çıkabilir
-
Hocam bunu yapabilirsin, ConnectionStore gibi bir class yapıp içine connectionstringleri array olarak dizersen, configurationa da yine connectionu string array olarak girersen ve o ConnectionStore sana .getDbContext() metoduyla random bir tanesini verirse olur yani. (Class isimlerini sallıyorum tabi istediğin adı koy)
Fakat biraz bad practice gibi geldi bana bu. Her birinin tek db sunucusu ve ayrı web sunucusu olsa bu web sunucularda apiler olsa sen de merkezden bu api sunucularının adreslerini bağlasan ileride daha rahat edebilirsin
Demek istediğim, sorduğun şey developer gözünden pratik gibi görünmekle birlikte enterprise architect gözüyle kabus
-
HolyOne bunu yazdı
Hocam bunu yapabilirsin, ConnectionStore gibi bir class yapıp içine connectionstringleri array olarak dizersen, configurationa da yine connectionu string array olarak girersen ve o ConnectionStore sana .getDbContext() metoduyla random bir tanesini verirse olur yani. (Class isimlerini sallıyorum tabi istediğin adı koy)
Fakat biraz bad practice gibi geldi bana bu. Her birinin tek db sunucusu ve ayrı web sunucusu olsa bu web sunucularda apiler olsa sen de merkezden bu api sunucularının adreslerini bağlasan ileride daha rahat edebilirsin
Demek istediğim, sorduğun şey developer gözünden pratik gibi görünmekle birlikte enterprise architect gözüyle kabus
bold yaptığım kısım kulağa hoş geliyor. şimdi herbir bayi için web api olduğunu varsayalım.
o zaman farklı bir katman yazıp bu apilerden gelen dataları okumam gerekecek.o zaman api kaynaklarını string array olarak bi yerde tutacağım.
foreach gibi bir döngü ile dönerek list oluşturacağım.
napsam böyle mi devam etsem.
-
Hocam, senin derdinin dermanı dotnet 8 ile gelen keyed services.
IDbConnection interface ine birden fazla sqlconnection implementasyonu yapıp istediğin db yi çağırabilirsin.
https://www.gencayyildiz.com/blog/net-8-keyed-service-dependency-injection/
-
nette multi-tenancy diye arama yapman lazım bu yapı için çok fazla örnek var. bende şuan bu tip bir yapı kullanıyorum.
-
Bu işi .net sizde çözebilirsin. SQL serverde 3 DB ye union all atıp eğer sunucularda farklıysa linked server yapıp DB bazında sorguları union all ile birleştirerek yapabilirsin. Yada queryleri soyutlayıp ilgili queryleri 3 DB den sorguladıktan sonra geri kalanı ui katmanına yollarsın. Eğer bir kaç tane tablo için bu durum mevcutsa linked server + (view ya da SP) işini daha rahat görür.