devnotcom / devnot-mentor-back-end

Devnot Mentor projesinin Back-end ve Rest API kaynak kodlarını içermektedir.
MIT License
69 stars 20 forks source link

EF cache sorununun düzeltilmesi #22

Closed umutluoglu closed 3 years ago

umutluoglu commented 3 years ago

EF üzerinden yapılan bir insert/update işlemi sonrasında, eğer kayıt database tarafında manuel vb. bir yolla değişirse EF kaydın kendi işlem yaptığı son halini tutuyor ve select yapılınca güncel halini getirmiyor. Sorunu araştırdık biraz, DI lifetime ile çözülebilir diye düşündük ama bu yöndeki çözümler bu problemi çözmüyor. Tüm querylerin using içinde context objesi açılarak çözülebildiğini önermişler bir kaynakta.

Bu konuda şöyle iki kaynak var. Çözüm için sağlıklı bir yöntem bulup uygulamamız gerekecek. Benzer problemi farklı bir yoldan çözdüyseniz çözüm önerilerinizi de yazabilirsiniz, tartışabiliriz. https://stackoverflow.com/questions/7647912/why-re-initiate-the-dbcontext-when-using-the-entity-framework https://stackoverflow.com/questions/46205114/how-to-refresh-an-entity-framework-core-dbcontext/51290890

mustafa-korkmaz commented 3 years ago

Umut hocam oncelikle bu bir cache problemi gibi gelmiyor bana. DBContext instance lari beklenen sekilde Dispose edilmiyor bence. Bunu AddDbContext yapmasi lazim aslinda, tam olarak neden bu davranis gerceklesiyor ben de net degilim ancak 1-2 onerim var.

ouzdev commented 3 years ago

Merhaba acaba cache sorunu ile alakalı bir gelişme varmı ?

umutluoglu commented 3 years ago

@yusufyilmazfr Autofac'i sen eklemiştin sanırım. Konunun onunla bir ilgisi var mı kontrol edebilir misin?

@mustafa-korkmaz Söylediklerinle ilgili olabilir, sorunu cache sorunu olarak mı anlandırmalıyız ondan emin değiliz ama sorun değişen kaydın DBContext tarafında güncellenmemesi ve eski haliyle çalışmaya devam etmesi. Kalıcı ve doğru bir çözüm her türlü işimizi görür. Yusuf yazdıklarını değerlendirir en kısa zamanda.

@ouzdev Hatırlatma için teşekkürler.

mustafa-korkmaz commented 3 years ago

Ben bir PoC calismasi yaparim bu issue ile ilgili ancak oncesinde #26 tamamlanmasi iyi olur diye dusunuyorum, zira rework cikar.

yusufyilmazfr commented 3 years ago

@mustafa-korkmaz https://github.com/devnotcom/devnot-mentor-back-end/pull/26 PR'ı merge ettim, şu an .NET 5' yükseldi.

Evet .NET içerisinde built in gelen DI mekanizması var, bizim orada Autofac kullanma sebebimiz Interceptor özelliğini kullanarak AOP'tan faydalanmaktı. Metot içerisinde try-catch, transaction, log kodları derken bayağı kalabalık hale geliyordu bundan ötürü kullandık.

Yukarıdaki maddeleri de tekrar göz önüne alıyorum, inceleyeceğim.

mustafa-korkmaz commented 3 years ago

Autofac paketlerini sildim ve sorun duzeldi. Teyit edebilirseniz cok iyi olur, ilgili branch su an burada PR hala olusturamadim cunku sildigim paketlerin implemente edilmis ozelliklerini eklemem gerekiyor. Asagida nasil yapacagimdan bahsetmeye calistim.

yusufyilmazfr commented 3 years ago

@mustafa-korkmaz emeğinize ve vaktinize sağlık. 🖖

Exception handling kısımlarını dediğiniz gibi yapabiliriz, basit de olur uygulaması. Unit of work kısmında da farklı entity üzerindeki işlemler için kullanmak istedik. Amacımız burada her işlem için bir transaction scope açmak değildi.

Autofac bağımlılığı kaldırılabilir, kaldırdığımız zaman bir transaction kısmına özen göstermek gerekecek birkaç metot içerisinde diğer işlemlerin düzenlenmesi çok da zor değil.

Kaldırılabilir geliyor bana, siz ne düşünüyorsunuz acaba? @umutluoglu @oguzkurtcuoglu

Tekrardan elinize sağlık. 🖖

yusufyilmazfr commented 3 years ago

https://github.com/devnotcom/devnot-mentor-back-end/pull/31 PR'ında @mustafa-korkmaz tarafından çözüldü. 🚀