Bu örneğimizde C# Windows Form kullanarak Entity Framework ile Select, Insert, Update ve Delete işlemlerini gerçekleştiren basit bir örnek yapacağız. Örneğimizde SQL Serverde bulunan dbOkul isimli veritabanını kullanacağız. Öncelikle veritabanımızı oluşturarak başlıyoruz.
Veri tabanımızı oluşturduktan sonra Form tasarımını aşağıdaki gibi oluşturuyoruz.
Form tasarımını tamamladıktan sonra Entity Framework bağlantımızı aşağıdaki adımları takip ederek oluşturuyoruz.
Öncelikle Solution Explorer Penceresinde projemizin üzerinde sağ tıklayarak Add-NewItem tıklıyoruz.
Açılan pencereden ADO.NET Entity Data Model seçip Add butonuna basıyoruz.
Daha sonra açılan pencereden EF Designer from database seçeneğini seçiyoruz.
Buradan New Connection diyerek SQL Server’ da kullanacağımız database i seçiyoruz ve devam ediyoruz.
Gelen pencerede Tables seçeneğini işaretliyoruz.
Bu işlemlerden sonra oluşturulan Entity Data Model‘ imizin Solution Explorer penresine geldiğini göreceğiz.
Bağlantı işlemlerini tamamladıktan sonra kod kısmına geçiyoruz.
Veriler datagridview üzerinde Form açıldığında , Ekleme , Güncelleme ve Silme yapıldığında tazelenmesini sağlamak amacıyla Datagridview’ e getirilme işlemini bir metot oluşturarak yapacağız.
Öncelikle Public olarak nesnemizi aşağıdaki gibi oluşturuyoruz
1 2 3 | dbOkulEntities db; |
ve Datagridview’ e doldurma işlemini doldur isimli bir metot ile gerçekleştiriyoruz.
1 2 3 4 5 6 7 | void doldur() //Verileri Çekme (Select) { db = new dbOkulEntities(); dataGridView1.DataSource = db.ogrencis.ToList(); } |
Bu işlemden sonra form açılır açılmaz datagridview’de verilerimizin görüntülenmesi için Form_Load olayında
1 2 3 4 5 6 | private void Form1_Load(object sender, EventArgs e) { doldur(); } |
“doldur” isimli metodumuzu çağırıyoruz.
Daha sonra Kayıt Ekle butonuna çift tıklayarak aşağıdaki kodları yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 | private void button1_Click(object sender, EventArgs e) //Kayıt Ekle { ogrenci yeniogrenci = new ogrenci(); yeniogrenci.Numara = Convert.ToInt32(textBox1.Text); yeniogrenci.Ad = textBox2.Text; yeniogrenci.Soyad = textBox3.Text; db.ogrencis.Add(yeniogrenci); db.SaveChanges(); doldur(); } |
Bu sayede textboxlara öğrenci bilgilerini girip Ekledikten sonra veri tabanına ekleme ( insert) işlemi yapılacak ve doldur metodu tekrar çağırılarak verilerin tekrar getirilmesi sağlanacaktır.
Güncelle butonuna ise;
1 2 3 4 5 6 7 8 9 10 11 | private void button2_Click(object sender, EventArgs e) //Güncelleme { int guncelle = Convert.ToInt32(textBox1.Text); var guncellenecekogrenci = db.ogrencis.Where(w => w.Numara == guncelle).FirstOrDefault(); guncellenecekogrenci.Ad = textBox2.Text; guncellenecekogrenci.Soyad = textBox3.Text; db.SaveChanges(); doldur(); } |
Sıra Sil butonuna geldi. Yine silme işlemi de Öğrenci Numarasına göre yapılacağından kodlarımızı aşağıdaki şekilde oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 | private void button3_Click(object sender, EventArgs e) //Silme { int silinecek = Convert.ToInt32(textBox1.Text); var silinecekkisi = db.ogrencis.Where(w => w.Numara == silinecek).FirstOrDefault(); db.ogrencis.Remove(silinecekkisi); db.SaveChanges(); doldur(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace cwinentitty { public partial class Form1 : Form { public Form1() { InitializeComponent(); } dbOkulEntities db; void doldur() //Verileri Çekme (Select) { db = new dbOkulEntities(); dataGridView1.DataSource = db.ogrencis.ToList(); } private void Form1_Load(object sender, EventArgs e) { doldur(); } private void button1_Click(object sender, EventArgs e) //Kayıt Ekle { ogrenci yeniogrenci = new ogrenci(); yeniogrenci.Numara = Convert.ToInt32(textBox1.Text); yeniogrenci.Ad = textBox2.Text; yeniogrenci.Soyad = textBox3.Text; db.ogrencis.Add(yeniogrenci); db.SaveChanges(); doldur(); } private void button2_Click(object sender, EventArgs e) //Güncelleme { int guncelle = Convert.ToInt32(textBox1.Text); var guncellenecekogrenci = db.ogrencis.Where(w => w.Numara == guncelle).FirstOrDefault(); guncellenecekogrenci.Ad = textBox2.Text; guncellenecekogrenci.Soyad = textBox3.Text; db.SaveChanges(); doldur(); } private void button3_Click(object sender, EventArgs e) //Silme { int silinecek = Convert.ToInt32(textBox1.Text); var silinecekkisi = db.ogrencis.Where(w => w.Numara == silinecek).FirstOrDefault(); db.ogrencis.Remove(silinecekkisi); db.SaveChanges(); doldur(); } } } |
harika
Doldur methodunu yazdım ve benden dbOkulEntities için bir class oluşturmamı istedi. Bu classların içine neler yazmamız gerektiği konusunda da bilgilendirir misiniz ?
public List GetStaffs()
{
using (var context = new DbStaff())
{
return context.Staffs.ToList();
}
}
ben doldurma kodu olarak kullandım bunu
merhabalar hocam öncelikle bizleri bilgilendirdiğiniz için çok teşekkür ederim yazdıklarınızı teker teker uygulamadım ancak koddan bir önceki aşamada diagramlar oluşmadı sistem hata verdi error no 6013 diye yardımcı olursanız çok teşekkür ederim:D
Çok geç bir cevap ama belki siteyi ziyaret edip bu hatayla karşılaşan yeni insanlar vardır.DATABASE te tablo oluştururken set primary key ‘ i işaretlemediğin için hata veriyor.
kız 2017 de yazmış 3 yıl sonra cevap vermişsin 3 yıla mid developer olmustur bile
Merhaba
using System.Data.Entity.Infrastructure;
public partial class DB_ExamEntities : DbContext
Infrastructure ekleyemyrm kırmızı görnyr ona bağlı olrak DbContext de öyle nen yapabilirim nerde yanlıs yaptm ?
“Unable to cast object of type ‘System.Windows.Forms.TextBox’ to type ‘System.IConvertible’.”
Ekleme, silme ve güncelleme yapmaya çalışırken böyle bir hata alıyorum yardım ederseniz sevinirim.
Hata veren bölümde textbox kullanımını gerçekleştirdiğiniz kod satırını yollarmısınız?
void doldur() //Verileri Çekme (Select) { db = new dbOkulEntities(); dataGridView1.DataSource = db.ogrencis.ToList(); } bu komuttaki ogrencis nerden geldi?
wpf ile Entity Framework kullanımı için yapmış olduğum örneği izleyebilirsiniz. ogrencis ismini kendisi oluşturuyor.
Veriyi kaydediyor fakat programı sonlandırdığımda veri tabanından siliniyor
db.SaveChanges(); satırlarını unutmuş olabilir misiniz?
if (hatavarmi==0)
{
ykullanici.Adi = txtKAd.Text;
ykullanici.Kullaniciadi = txtKKullaniciAdi.Text;
ykullanici.Soyadi = txtKSoyad.Text;
ykullanici.Parola = txtKParola.Text;
ykullanici.Telefon = txtKTelefon.Text;
ykullanici.Dogum_Tarihi = dtpKDogumtarihi.Value;
ykullanici.Yonetici=yoneticimi;
db.Kullanicilar.Add(ykullanici);
db.SaveChanges();
}
Şeklinde veri tabanına kayıt ggerçekleşiyor kontrol ettim kayıt işlemini yapıyor fakat programı kapattıktan sonra veri tabanını kontrol ettiğimde veriler gözükmüyor
Sınıf isminiz Kullanici varsayarak yazıyorum.if içinde en başa
Kullanici ykullanici=new Kullanici();
yazmalısınız.
Üst kısmında onu da yaptım ki zaten onu yapmazsam program hata verecektir diye düşünüyorum
Kodlarınızın tamamını göremiyorum şu an. İf içine alıp deneyip sonucu yazarmısınız.
if (hatavarmi==0)
{
Kullanici ykullanici = new Kullanici();
ykullanici.Adi = txtKAd.Text;
ykullanici.Kullaniciadi = txtKKullaniciAdi.Text;
ykullanici.Soyadi = txtKSoyad.Text;
ykullanici.Parola = txtKParola.Text;
ykullanici.Telefon = txtKTelefon.Text;
ykullanici.Dogum_Tarihi = dtpKDogumtarihi.Value;
ykullanici.Yonetici=yoneticimi;
db.Kullanicilar.Add(ykullanici);
db.SaveChanges();
}
if içerisine aldım kullanici olarak ykullanici tanımladım fakat aynı problemi yaşıyorum
Anladım. Şu an programı çalıştıramıyorum bulunduğum ortamda. Yarın daha detaylı ilgilenebilirim acil değilse. Bir de son olarak bazen unutuluyor veritabanında Select ifadesinin yeniden çalıştırılması gerektiği. Böyle bir sorun yoksa yarın daha detaylı kontrol edebilirim.
Son dediğiniz select ifadesinin tekrar çalıştırılması olayını anlayamadım. Veri kayıtı sırasında select ifadesini kullandığımız bir yer bilmiyorum. Kaydın kontrol edilmesi için yazdığım ifade :
foreach (Kullanici gkullanici in db.Kullanicilar.ToList())
{
MessageBox.Show(gkullanici.Id.ToString());
}
SQL Server üzerinde kontrol ederken demek istedim. Bu arada projeniz çok özel değilse maille yollarsanız dediğim gibi yarın daha detaylı inceleyebilirim. Ya da örnek projeyi link olarak buraya koyarım.
Mail olarak gönderdim. Şimdiden teşekkür ederim.
Merhaba. Projenizde bulduğum sorun: EntityFramwork ile oluşturduğunuz model katmanının tekrar yapılması gerekmektedir. Bunu yapmadan evvel veritabanı dosyalarınızı SQLServer’a attach etmelisiniz. Eğer attach etmekte de sorun yaşarsanız, veritabanı klasörünüz üzerinde sağ tuş’a basıp güvenlikten tüm kullanıcı türleri için tam denetim yetkisi vermelisiniz. Model katmanını çıkardıktan sonra veritabanı üzerinde yapılan değişiklikler, veya denetim yetkisizliği durumlarında bu tip sorunlar oluşabilmektedir.
Yardımınız ve ilginiz için sağol sorunu çözdüm. Kolay gelsin.
Rica ederim. İyi çalışmalar.
Emre UZUN Böyle ben kayıt yapabilirim.
HuzurEviDB.Personels.Add(new Personel()
{
Profil = img,
TC_KimlikNo = textBox6.Text,
Adi = textBox1.Text,
Soyadi = textBox2.Text.ToUpper(),
Cinsiyet = cins,
PersonelAdi = textBox8.Text,
Sifre = textBox7.Text,
Yetki = 0
});
HuzurEviDB.SaveChanges();
Silmek için textboxa numara girmek yerine Datagrid’ de seçilen kaydı nasıl silebilirim?
kayıt silme butonundaki;
int silinecek = Convert.ToInt32(textBox1.Text);
kod satırı yerine
int silinecek = ((ogrenci)dgogrenci.SelectedItem).Numara;
kod satırını yazın.
Doldur();Metoduna ne yazılıyor orayı atlamışsınız sanırım
Yazıyor üst bölümde.
void doldur() //Verileri Çekme (Select) { db = new dbOkulEntities(); dataGridView1.DataSource = db.ogrencis.ToList(); }