none
Toplu kayıt silme.. RRS feed

  • Soru

  • Bir table' de uyuşan kayıtları alttaki gibi siliyorum..

    Bunun daha kolay bir yolu var mı? 

    Teşekkürler

    String pro_ ="" ;

    Entities1 genel = new  Entities1();      
    var   silinecekler  = (from s in genel.para where s.protokol ==pro_ select new { s.ID }).ToList();
    foreach (var item in silinecekler)
    {
      ID_ = item.ID;
      para p = (from s in genel.para where s.ID == ID_  select s).SingleOrDefault();
      if (p != null)
          {
            genel.para.Remove(p);
            genel.SaveChanges();
          }
     }

    25 Ağustos 2016 Perşembe 13:29

Yanıtlar

Tüm Yanıtlar

  • genel.para.RemoveRange(genel.para.Where(x => x.protokol.Trim() ==pro_));
    genel.SaveChanges();

    Bu şekilde oluyor.

    Teşekkürler. 

    25 Ağustos 2016 Perşembe 13:48
  • Konuralp,

    Olmasina olur da, bu sekilde silinecek kayitlarin sayisi az ise kullan. Yoksa bu komutun sadece syntax kolaylastirmaktan oteye faydasi yok, backende delete komutlarini tek tek gonderiyor (EF'nin zayif yonlerinden birisi). Eger kayit sayin fazla ise, klasik yontemleri kullanman ya da delete sorgusunu yazip SqlQuery ile kullanmanda fayda var.


    25 Ağustos 2016 Perşembe 14:16
    Yanıtlayıcı
  • Çok sağol Çetin,

    Ben bildiğim gibi yapayım o zaman..

    25 Ağustos 2016 Perşembe 14:31
  • birincisi en kötü olan. Döngü içinde SaveChanges.

    ikincisi biraz daha iyi. EF şöyle bir sorgu hazırlayacak;

    delete from xxxx where yyy=1;
    delete from xxxx where yyy=2;
    .
    .
    delete from xxxx where yyy=n;


    Ama eğer fk ile ilişkili tablolarda , master tablodan kayıt silince detail tablodaki bağımlı satırları silmek istiyorsan ikisi de en kötü yöntem.

    Database'de tanımladığın Relation'un OnDelete 'ine Cascade verirsen kendisi otomatik siler.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com





    25 Ağustos 2016 Perşembe 14:43
    Moderatör
  • Önay,

    Muhtemelen hasta vizitleri tablosundan belli bir protokole uyan tum kayitlari silmek istiyor. Yani yaptiginin master tablodan silmeyle ilgisi yok ama tek seferde N tane kayit silmesi gerekiyor. EF o konuda zayif (genel olarak .Net zayif ister EF ister dataset, ya da L2S olsun). Dogrudan SQL komutu yazip gondermek en iyisi.

    (Onca yildan sonra hala .Net EF neden boyle bir delete komutunu optimize edip tek bir Delete komutuna cevirmez anlamiyorum)
    25 Ağustos 2016 Perşembe 15:07
    Yanıtlayıcı