Merhaba arkadaşlar,
Code First yaklaşımı bir model ürettiğimizde, bu model içerisinde aynı zamanda da veri oluşturmak işimize yarayabilir. Bu yazıda code first kullanarak içerisinde veri olan bir modeli nasıl oluşturacağımızdan bahsedeceğim.
Visual Studio'da bir WinForm projesi oluşturalım. Solution explorer penceresinden proje adına sağ tıklayıp "Manage NuGet Packages.. " seçeneğine tıklayalım. Açılan pencereden code first kullanımı için gerekli olan "Entity Framework" paketini indirelim.
Tasarım aşamasında ana formumuza sadece listbox ekleyelim. Daha sonra projemize "Kisi" isimli bir class ekleyip içerisine ID,Ad ve Soyad alanları ekleyelim. Ad ve Soyad alanları listbox içinde görüntülemek için de toString() metodunu override edelim.
Kodumuza oluşturacağımız veritabanı context yapısı için KisiContext isimli bir class oluşturalım ve DbContext nesnesinden türetelim. Buraya DbSet<Kisi> tipinde property ekleyelim. FakeData ile veri oluşturmak için bize sunulan hazır bir paket bulunmaktadır. FakeData yardımıyla adres, telefon,yaş, tarih vb. verilerini kolaylıkla üretebilirsiniz. Manage NuGet Packages seçeneğiyle projemize FakeData paketini indirelim. Bu paket sayesinde örnek verilerimizi veritabanına basabiliriz. Bunun için bir KisiContext class yapısının içinde KisiOlusturucu isimli bir class oluşturalım ve miras almak için CreateDatabaseIfNotExists<KisiContext> kodunu kullanalım. Bu yapı ile bize class içerinde override edebileceğimiz InitializeDatabase ve Seed metotlarını kullanmamıza olanak sağlayacaktır. InitializeDatabase, database oluşurken çalışır. Seed metodu ise database oluşturulduktan sonra çalışır. FakeData oluşturmak için kuracağımız yapıyı Seed metodu içinde şu şekilde tanımlayacağız :
KisiContext yapısında oluşturduğumuz KisiOlusturucu kullanmak için şu şekilde tanımlayacağız :
Context içerisinde işlemimizi tamamladıktan sonra app.config içerisinde connection string ifadesini oluşturalım. Burada dikkat etmemiz gereken bu tanımlamanın configSections etiketinin dışında yapılmasıdır.
Formumuzun load olayına gidip context nesnemizi oluşturalım vev oluşturduğumuz verileri listbox ile gösterelim.
Bu işlemleri tamamladıktan sonra kodumuzu çalıştırabiliriz. Kodumuzu çalıştırdıktan sonra oluşan ekran görüntüsü şu şekilde olacaktır:
24 Haziran 2015 Çarşamba
21 Haziran 2015 Pazar
ListView İçerisinde Birden Fazla LinkButton Kullanımı
Merhaba arkadaşlar,
Bugün WebForm ile her satırında iki linkbutton yer alan bir listview kontolünü yapacağız. Bunun için öncelikle sayfamıza bir listview ekleyelim ve ardından da görüntülemek istediğimiz üyelerle birlikte 2 adet de linkbutton ekleyelim. Oluşturacağımız listview içerisinde bir satırın rengini açık diğer bir satırın rengini de koyu yapacağım. Sonuçta oluşacak listview görüntüm şu şekilde olacak:


Kodda yer alan e değeri içindeki CommandName ile bize linkbutton attribute değerinde tanımladığımız "Update" veya "Delete" değeri dönmektedir. Gelen değer "Update" ise Guncelle.aspx sayfasına session içerisindeki postId değeriyle gönderiyoruz. Eğer gelen değer "Delete" ise SilOnay.aspx sayfasına yine session içerisindeki postId değeriyle yolluyoruz.
Linkbutton kullanarak yapacağınız işlemleri belirleyebilir ve linkbutton içerisinde yapacağınız bu işlemi seçili satırın Id değerini yukarıdaki gibi alıp da Id değerine göre veri güncelleme ve veri silme işlemlerini yapabilirsiniz.
Bugün WebForm ile her satırında iki linkbutton yer alan bir listview kontolünü yapacağız. Bunun için öncelikle sayfamıza bir listview ekleyelim ve ardından da görüntülemek istediğimiz üyelerle birlikte 2 adet de linkbutton ekleyelim. Oluşturacağımız listview içerisinde bir satırın rengini açık diğer bir satırın rengini de koyu yapacağım. Sonuçta oluşacak listview görüntüm şu şekilde olacak:
ListView içerisinde bir satır açık ve bir satır koyu renk kullanımı için <ItemTemplate> ve <AlternatingItemTemplate> yapılarını kullanacağız. Birinin css class yapısına açık renk diğerine de koyu renk vereceğiz. Öncelikle istediğimiz görünüm için ayarlarımızı yapalım.

Yukarıdaki şekilde yer alan listview yapısını oluşturmak için aspx sayfamızdaki source bölümünde yer alan form etiketinin içine aşağıdaki kodları yazıyoruz. Burada HiddenField şeklinde tanımladığımız "Id" değeri listview içerisinde görüntülenmeyecek fakat arkaplanda işlemlerimizi yaparken kullanabileceğiz.
ListView içerisinde yer alan linkbutton seçeneklerinden herhangi birine tıkladığımda bulunduğu satırın "Id" değerini bana geri vermesini, ayrıca update butonu için onun ilgili kodlarını ve delete için onun ilgili kodlarını çalıştırmasını istiyorum. Key olarak Id değerini kullanabilmek için listview attribute değerlerinden biri olan "DataKeyNames" yapısını kullanmalıyız. Update ve Delete seçeneklerinden hangisinin seçildiğini kod tarafında belirleyebilmek için her birine CommandName değeri eklemeliyiz ve listview içinde "OnItemCommand" attribute değerini kullanmalıyız.Yaptığımız son değişikliklerle listview kod yapımız şu şekilde olacaktır:

Tasarım aşamasını tamamladıktan sonra kodda boş bir yere sağ tıklayıp View Code diyelim ve seçili linkbutton için yapılacak işlerimizi tanımlayalım.
Yukarıda yer alan kodda ListViewDataItem tipinde data verimizi elde ediyoruz. DataKeys özelliğinden faydalanarak key değeri olarak tanımladığımız "Id" değerini elde edip postId isimli string tipinde bir değişkene atıyoruz. Elde ettiğimiz postId değerini başka sayfalarda kullanmak için "Session" içerisine yolluyoruz. Session, bize sayfalarımız arasında veri taşımamıza yardımcı olur.
Kodda yer alan e değeri içindeki CommandName ile bize linkbutton attribute değerinde tanımladığımız "Update" veya "Delete" değeri dönmektedir. Gelen değer "Update" ise Guncelle.aspx sayfasına session içerisindeki postId değeriyle gönderiyoruz. Eğer gelen değer "Delete" ise SilOnay.aspx sayfasına yine session içerisindeki postId değeriyle yolluyoruz.
Linkbutton kullanarak yapacağınız işlemleri belirleyebilir ve linkbutton içerisinde yapacağınız bu işlemi seçili satırın Id değerini yukarıdaki gibi alıp da Id değerine göre veri güncelleme ve veri silme işlemlerini yapabilirsiniz.
Etiketler:
asp.net,
CommandName,
DataKeyNames,
linkbutton,
listview,
OnItemCommand
Entity Framework - Partial Class Kullanımı
Merhaba arkadaşlar,
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.
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.
15 Haziran 2015 Pazartesi
Code Snippet
Merhaba arkadaşlar,
Projelerimizde kendi yazdığımız ve visual studio üzerinde hazır olarak kullanabileceğimiz bir "Snippet" için yapmamız gereken ilk şey Visual Studio içerisinden Tools sekmesinde yer alan Extension & Updates yolunu takip ederek gerekli designer aracını projeye dahil etmektir. Extentions & Updates seçeneğine tıkladıktan sonra karşımıza çıkan pencerede online sekmesinde "snippet designer" seçeneğini aratalım.
Projelerimizde kendi yazdığımız ve visual studio üzerinde hazır olarak kullanabileceğimiz bir "Snippet" için yapmamız gereken ilk şey Visual Studio içerisinden Tools sekmesinde yer alan Extension & Updates yolunu takip ederek gerekli designer aracını projeye dahil etmektir. Extentions & Updates seçeneğine tıkladıktan sonra karşımıza çıkan pencerede online sekmesinde "snippet designer" seçeneğini aratalım.
Yukarıda kırmızıyla işaretli olan seçeneği indirelim. Yükleme işlemi bittikten sonra Visual Studio'da değişikliklerin yapılandırılması için programı yeniden başlatalım. Yeni bir proje oluşturup form load olayını aşağıdaki gibi düzenleyelim:
Yazdığımız kodları seçip sağ tıklayıp "Export as Snippet" seçeneğine tıklayalım. Eğer bu seçenek sizde görünmüyorsa yukarıdaki işlemleri yaptığınızdan emin olup tekrar deneyin.
Bu işlemi yaptıktan sonra karşımıza çıkan pencereden snippet içinde değişken değerler olarak kullanacağımız alanları belirleyelim. Daha sonra bu alanı seçip sağ tıklayalım ve "Make Replacement" diyelim. Bu işlemi değişebilecek tüm alanlarımıza uygulayalım. Kod içerisindeki işlemimiz bittiğinde sıra oluşturacağımız snippet için isim ve kısayol belirleme işleminde artık. İstediğiniz ismi ve klavye kısayolunu belirttikten sonra ekrandaki son görüntü şu şekilde olacaktır:
Oluşturduğumuz snippet dosyasını kaydedelim. Tekrar form load olayına gidelim ve az önce yazdığımız kodu silelim. Belirlediğimiz kısayolu yazalım(shortcut için yazdığımız yazı) ve tab tuşuna basalım. Az önce snippet olarak kaydettiğimiz kod bloğu karşımıza gelecektir. Düzenlenebilir(editable) alanlarda dolaşmak için yine tab tuşunu kullanabilir ve istediğimiz ayarı yaptıktan sonra programımızda rahatça kullanabiliriz.
Kaydol:
Kayıtlar (Atom)