Entity Framework kullanacağımız bir desktop uygulaması yazdığımızı varsayalım. Projemize, Entity Framework ile bir data model oluşturup eklediğimizi ve daha sonra burada yer alan tüm class yapılarının ToString() metodunu override ettiğimizi düşünelim. Daha sonra oluşturduğumuz bu data modele bir tablo daha eklememiz gerektiğinde "Update Model from Database" seçeneğini kullanarak bir değişiklik yapabiliriz. Ama bu değişikliği yaptığımızda, ToString() eklediğimiz tüm class yapıları bu değişiklikten etkilenir. Çünkü entitiy framework ile oluşturulan classlar Auto Generated yapıdadır. Bu nedenle modeli güncellediğimizde yeniden oluşturulacak ve içerisine yazmış olduğumuz ToString() metodu da silinecektir. Peki bunun önüne nasıl geçebiliriz? Yaptığım bir değişikliğin update ile değişmesini nasıl engellerim? Burada yardımımıza partial class yetişiyor.
Partial class, adından da anlaşılacağı gibi oluşturduğumuz classın bir parçasıdır. Yapacağımız değişiklikleri modelle oluşan ana classlar içerisinde değil de kendi oluşturduğumuz bir partial class içerisinde yaparsak güncellemelerden etkilenmesini engellemiş oluruz.
Northwind ile bir data model oluşturalım ve içerisine "Categories ve Products" tablolarını ekleyelim. Her birinin classlarının içerisinde ToString() metodunu override edelim.
Bu işlemi yaptıktan sonra dosyaları kaydedelim ve oluşturduğumuz data model içine Customers tablosunu ekleyelim ve kaydedelim. Az önce ToString() metotlarını override ettiğimiz Categories ve Products classlarının içinde artık bu metodun olmadığını göreceksiniz. Şimdi bahsettiğmiz partial class yapısını kullalım. Projemize sağ tıklayıp modeldeki classlardan farklı isimlerde classlar ekleyelim. Categories için Category2, Products için de Product isimli 2 adet class oluşturalım. Bu classların içini aşağıdaki şekildeki gibi değiştirip kaydedelim.
Classları her ne kadar Category2 ve Product2 ismiyle oluşturmuş olsak da kod içerisinde yer alan class ismini data modelde yer alan isimler ile aynı yapmalıyız. Böylece hangi classın bir parçası olduğunu belirtebiliriz. Ayrıca namespace de yer alan ifadelerin de data modeldekiyle aynı olması gerekmektedir. Şekildeki değişiklikleri yaptıktan sonra data model içerisinden az önce eklediğmiz Customers tablosunu silip modeli kaydedelim.
Solution Explorer içerisinde az önce oluşturduğumuz Category2 ve Product2 classlarının hala durduğunu ve içlerinde yer alan ToString() metotlarında herhangi bir değişiklik olmadığını görebilirsiniz. Bu şekilde, güncellediğiniz modelde yaptığınız değişiklikleri rahatça koruyabilirsiniz.
Hiç yorum yok:
Yorum Gönder