Soran
Entity Framework

Genel Tartışma
-
Merhaba,
Entity Framework kullanarak, bir otomasyon geliştiriyorum. Kira tablosunda sil butonuna tıkladıktan sonra, silinen elemanın Odemeler tablosuna eklemek istiyorum. Tablolar bir kiranın birden fazla ödemesi olabilir şeklinde birbirleriyle ilişkili. Silme kısmında sıkıntı yok ama silinen elemanı ödemeler tablosuna ekleyemiyorum. Nasıl yapabilirim ?
- Değiştirilmiş Tür Kyamuran SalibryamMicrosoft contingent staff, Moderator 30 Kasım 2020 Pazartesi 22:40
Tüm Yanıtlar
-
Kodları görmediğimden tam olarak yorum yapamıyorum ancak şunu belirtebilirim.
Silinen eleman zaten elinde. Örnek vermek gerekirse
using (var context = new DatabaseAdinDbContext()) { YeniTablon tablo = new YeniTablon(){ //burada yeni oluşturacağın tabloya göre, entity'den değerleri alabilirsin. Tablo kolonlarını bilmediğimden dolayı 2 örnek verdim. KiraId = silinecek.Id, digerdeger = silinecek.digerdeger }; //silinecek kayıtla işin bittiğinden, veritabanından da silebilirsin. Buradaki silinecek senin silinecek olan kaydın. context.TabloAdin.Remove(silinecek); context.YeniTablon.Add(tablo); //daha sonraki kodlarda farklı bir işlem yapmak istiyorsan devam edebilirsin ya da savechanges ile kaydedebilirsin. }
-
Öncelikle cevap verdiğiniz için teşekkür ederim.
private void button3_Click(object sender, EventArgs e)
{
using (var context = new MyContext())
{
Kira sil = new Kira();
var id = (Guid)dataGridView1.CurrentRow.Cells[0].Value;
sil = context.Kiralar.FirstOrDefault(v => v.Id == id);
sil.Arac.KiraDurum = false;
FormOdeme formOdeme = new FormOdeme();
formOdeme.Show();
Odeme odeme = new Odeme()
{
KiraId = sil.Id,
toplam_tutar = sil.Toplam_tutar,
BaslangicTarih = sil.Tarih,
BitisTarih = sil.Sure
};
context.Kiralar.Remove(sil);
context.Odemeler.Add(odeme);
context.SaveChanges();
}
}Bu şekilde yapıyorum. Button3 silme buttonum. Ama uygulamayı çalıştırıp datagridden eleman seçip button3'e tıkladığımda,
System.Data.Entity.Infrastructure.DbUpdateException: 'Unable to insert or update an entity because the principal end of the 'AracKiralama.Odeme_Kira' relationship is deleted.'
şöyle bir hata alıyorum.
-
Öncelikle aldığınız hata Releationship ile ilgili. Burada tablo yapınıza bakmak lazım. Fikir vermesi açısından burada yer alan örneklere bakabilirsiniz.
Ek olarak belirtmem gerekirse, projenin ileride büyüyeceğini de düşünerek, butonlara mutlaka isim verin. Örneğin Button3 yerine, btnSil vb. gibi. Kod karmaşasından kurtulursunuz.
Ayrıca gelen kaydın ( Kira ) boş olup olmadığına da bakın.
Form gösterme işini en sonra bırakın (formda başka işlemler de yapabilirsiniz vb.)
Fikir vermesi için :
private void button3_Click(object sender, EventArgs e) { try { using (var context = new MyContext()) { var id = (Guid)dataGridView1.CurrentRow.Cells[0].Value; Kira sil = context.Kiralar.Where(x => x.Id == id).FirstOrDefault(); if (sil != null) { sil.Arac.KiraDurum = false; Odeme odeme = new Odeme() { KiraId = sil.Id, toplam_tutar = sil.Toplam_tutar, BaslangicTarih = sil.Tarih, BitisTarih = sil.Sure }; context.Kiralar.Remove(sil); context.Odemeler.Add(odeme); context.SaveChanges(); FormOdeme formOdeme = new FormOdeme(); formOdeme.Show(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
barissaritas @ windowslive . com
-