9

Bir Ordinal sütunu olan bir tabloda benzersiz bir dizin içeren bir tablom var. örneğin tablo şu sütunlar bulunur Yani:DbContext SaveChanges İfadenin Sırası Yürütme

Sıra

tableId, ID1, ID2, benzersiz dizin sütunları ID1, ID2, Sıra karşısındadır.

Elimde olan problem, bir kaydı veritabanından silerken sıraları tekrar sıralamak için tekrar sıralarımdır. Benim silme fonksiyonu aşağıdaki gibi görünecektir:

public void Delete(int id) 
    { 
     var tableObject = Context.TableObject.Find(id); 
     Context.TableObject.Remove(tableObject); 
     ResequenceOrdinalsAfterDelete(tableObject); 
    } 

sorunu olduğunu ben Context.SaveChanges() onlar geçirildi farklı bir sırayla ifade işlemeye göründüğü gibi benzersiz bir dizin kırar çağırdığınızda. Örneğin şu olur:

  1. Sıra
  2. rekor

yerine Sil Resequence:

  • sıra sayılarını Resequence kaydı sil

    Bu EF'in doğru davranışı mı? Ve eğer öyleyse, yürütme sırasını zorlamak için bu davranışı geçersiz kılacak bir yol var mı? Ben düzgün açıkladım olmadıysanız

    , komutların

  • cevap

    9

    Sipariş tamamen EF kontrolü altındadır ... lütfen bana bildirin. Sipariş nasıl etkilediğini tek yolu her işlem için ayrı SaveChanges kullanıyor:

    public void Delete(int id) 
    { 
        var tableObject = Context.TableObject.Find(id); 
        Context.TableObject.Remove(tableObject); 
        Context.SaveChanges(); 
        ResequenceOrdinalsAfterDelete(tableObject); 
        Context.SaveChanges(); 
    } 
    

    elle de yaratılmış işlemde bu kodu çalışmalıdır (=>TransactionScope) atomicity sağlamak için.

    Ancak en iyi çözüm, saklı yordamı kullanmak olacaktır çünkü yeniden boyutlandırma, etkilenen tüm kayıtları veritabanından uygulamanıza çekmek, sıralarını değiştirmek ve bunları tek tek veritabanına geri kaydetmek zorundadır.

    B

    Btw. Bunu veritabanı ile yapmak kokuyor. "Ordinal" dizinizde bir boşluk olmanın problemi nedir?

    +0

    Merhaba Cevabınız için teşekkürler! Bunu daha önce bir veritabanıyla ve kokladığınızı söylediniz. Kod korkunç ve bir acıydı, artı bu sadece bir yönetici bölümünden erişilebilir olacak ve küçük miktarlarda değişecektir. Alışkanlıkların yeniden düzenlenmesi için ana sebep, yönetim kullanıcılarının siparişi çeşitli tablolarda ayarlayabilmeleri ve boşluklar gördüğünde seçici veya karışık olmalarıdır ... EF'in sağladığınız sırayla yürütmediği bir bummer. – didiHamman