Aracılığıyla paylaş


.NET Framework geliştirmesinde hiyerarşik güncelleştirme

Not

Veri kümeleri ve ilgili sınıflar, uygulamaların veritabanıyla bağlantısı kesilirken uygulamaların bellekteki verilerle çalışmasını sağlayan 2000'lerin başlarındaki eski .NET Framework teknolojileridir. Bunlar özellikle kullanıcıların verileri değiştirmesine ve değişiklikleri veritabanında kalıcı hale getirebilmesine olanak tanıyan uygulamalar için kullanışlıdır. Veri kümelerinin çok başarılı bir teknoloji olduğu kanıtlanmış olsa da, yeni .NET uygulamalarının Entity Framework Core kullanmasını öneririz. Entity Framework, tablosal verilerle nesne modelleri olarak çalışmak için daha doğal bir yol sağlar ve daha basit bir programlama arabirimine sahiptir.

Hiyerarşik güncelleştirme , bilgi tutarlılığı kurallarını korurken güncelleştirilmiş verileri (iki veya daha fazla ilişkili tablo içeren bir veri kümesinden) veritabanına geri kaydetme işlemini ifade eder. Bilgi tutarlılığı , veritabanındaki ilgili kayıtları ekleme, güncelleştirme ve silme davranışını denetleen kısıtlamalar tarafından sağlanan tutarlılık kurallarını ifade eder. Örneğin, bu müşteri için siparişlerin oluşturulmasına izin vermeden önce müşteri kaydının oluşturulmasını zorunlu tutan bilgi tutarlılığıdır. Veri kümelerindeki ilişkiler hakkında daha fazla bilgi için bkz . Veri kümelerindeki ilişkiler.

Hiyerarşik güncelleştirme özelliği TableAdapterManager , türü belirtilen bir veri kümesindeki s'leri TableAdapteryönetmek için kullanır. Bileşen TableAdapterManager , .NET türü değil Visual Studio tarafından oluşturulan bir sınıftır. Bir tabloyu Veri Kaynakları penceresinden Bir Windows Formu veya WPF sayfasına sürüklediğinizde, Visual Studio forma veya sayfaya TableAdapterManager türünde bir değişken ekler ve bunu bileşen tepsisindeki tasarımcıda görürsünüz. Sınıfı hakkında TableAdapterManager ayrıntılı bilgi için TableAdapters'ın TableAdapterManager Başvurusu bölümüne bakın.

Varsayılan olarak, bir veri kümesi ilgili tabloları "yalnızca ilişkiler" olarak kabul eder ve bu da yabancı anahtar kısıtlamalarını zorunlu kılmadığı anlamına gelir. Veri Kümesi Tasarımcısı'nı kullanarak tasarım zamanında bu ayarı değiştirebilirsiniz. İlişki iletişim kutusunu açmak için iki tablo arasındaki ilişki çizgisini seçin. Burada yaptığınız değişiklikler, ilgili tablolardaki değişiklikleri veritabanına geri gönderirken nasıl davranacağını belirler TableAdapterManager .

Veri kümesinde hiyerarşik güncelleştirmeyi etkinleştirme

Varsayılan olarak, bir projeye eklenen veya oluşturulan tüm yeni veri kümeleri için hiyerarşik güncelleştirme etkinleştirilir. Veri kümesindeki türlenmiş bir veri kümesinin Hiyerarşik Güncelleştirme özelliğini True veya False olarak ayarlayarak hiyerarşik güncelleştirmeyi açın veya kapatın:

Hiyerarşik güncelleştirme ayarı

Tablolar arasında yeni bir ilişki oluşturma

İki tablo arasında yeni bir ilişki oluşturmak için Veri Kümesi Tasarımcısı'nda her tablonun başlık çubuğunu seçin, sonra sağ tıklayıp İlişki ekle'yi seçin.

Hiyerarşik güncelleştirme ilişki ekle menüsü

Yabancı anahtar kısıtlamalarını, basamaklı güncelleştirmeleri ve silmeleri anlama

Veritabanındaki yabancı anahtar kısıtlamalarının ve basamaklı davranışların oluşturulan veri kümesi kodunda nasıl oluşturulduğunu anlamak önemlidir.

Varsayılan olarak, bir veri kümesindeki veri tabloları, veritabanındaki ilişkilerle eşleşen ilişkilerle (DataRelation) oluşturulur. Ancak, veri kümesindeki ilişki yabancı anahtar kısıtlaması olarak oluşturulmaz. DataRelation, yalnızca İlişki olarak yapılandırılır veya DeleteRule etkindirUpdateRule.

Varsayılan olarak, veritabanı ilişkisi basamaklı güncelleştirmeler veya basamaklı silmeler açık olarak ayarlanmış olsa bile, art arda güncelleştirmeler ve basamaklı silmeler kapatılır. Örneğin, yeni bir müşteri ve yeni bir sipariş oluşturup verileri kaydetmeye çalışmak veritabanında tanımlanan yabancı anahtar kısıtlamalarıyla çakışmaya neden olabilir. Daha fazla bilgi için bkz . Veri kümesini doldururken kısıtlamaları kapatma.

Güncelleştirmeleri gerçekleştirmek için sırayı ayarlama

Güncelleştirmelerin gerçekleştirilme sırasının ayarlanması, değiştirilen tüm verileri bir veri kümesinin tüm tablolarına kaydetmek için gereken tek tek eklemelerin, güncelleştirmelerin ve silmelerin sırasını ayarlar. Hiyerarşik güncelleştirme etkinleştirildiğinde, eklemeler önce gerçekleştirilir, ardından güncelleştirmeler ve ardından silinir. , TableAdapterManager önce güncelleştirmeleri gerçekleştirmek, ardından ekler ve sonra siler için ayarlanabilen bir UpdateOrder özellik sağlar.

Not

Güncelleştirme sırasının her şey dahil olduğunu anlamak önemlidir. Başka bir ifadeyle, güncelleştirmeler gerçekleştirildiğinde, veri kümesindeki tüm tablolar için eklemeler ve silmeler gerçekleştirilir.

Özelliğini ayarlamak UpdateOrder için, Öğeleri Veri Kaynakları Penceresinden forma sürükledikten sonra bileşen tepsisinde öğesini seçin TableAdapterManager ve özellikler penceresinde özelliği ayarlayınUpdateOrder.

Hiyerarşik güncelleştirme gerçekleştirmeden önce veri kümesinin yedek kopyasını oluşturma

Verileri kaydettiğinizde (yöntemini çağırarak TableAdapterManager.UpdateAll() ), tek bir işlemdeki TableAdapterManager her tablonun verilerini güncelleştirmeye çalışır. Herhangi bir tablo için güncelleştirmenin herhangi bir bölümü başarısız olursa, tüm işlem geri alınır. Çoğu durumda geri alma işlemi uygulamanızı özgün durumuna döndürür.

Ancak bazen veri kümesini yedek kopyadan geri yüklemek isteyebilirsiniz. Bunun bir örneği, otomatik artırma değerleri kullandığınızda ortaya çıkabilir. Örneğin, bir kaydetme işlemi başarılı olmazsa, veri kümesinde otomatik artırma değerleri sıfırlanmaz ve veri kümesi otomatik olarak artan değerler oluşturmaya devam eder. Bu, numaralandırmada uygulamanızda kabul edilemeyecek bir boşluk bırakır. Bunun bir sorun olduğu durumlarda, TableAdapterManager işlem başarısız olursa mevcut veri kümesini yedek kopyayla değiştiren bir özellik sağlar BackupDataSetBeforeUpdate .

Not

Yedekleme kopyası yalnızca yöntem çalışırken bellektedir TableAdapterManager.UpdateAll . Bu nedenle, bu yedekleme veri kümesi özgün veri kümesinin yerini alır veya yöntemin çalışması biter bitmez kapsam TableAdapterManager.UpdateAll dışına çıktığı için programlı erişim yoktur.

Hiyerarşik güncelleştirmeyi gerçekleştirmek için oluşturulan kaydetme kodunu değiştirme

yöntemini çağırarak TableAdapterManager.UpdateAll ve ilgili tabloları içeren veri kümesinin adını geçirerek veri kümesindeki ilgili veri tablolarındaki değişiklikleri veritabanına kaydedin. Örneğin, NorthwindDataset içindeki tüm tablolardan arka uç veritabanına güncelleştirme göndermek için yöntemini çalıştırın TableAdapterManager.UpdateAll(NorthwindDataset) .

Öğeleri Veri Kaynakları penceresinden bıraktıktan sonra, her tabloyu (TableAdapter.Fillyöntemler) doldurmak için olaya otomatik olarak kod eklenirForm_Load. Veri kümesindeki verileri veritabanına TableAdapterManager.UpdateAll (yöntemi) geri kaydetmek için kaydet düğmesine tıklama olayına BindingNavigator da kod eklenir.

Oluşturulan kaydetme kodu, yöntemini çağıran CustomersBindingSource.EndEdit bir kod satırı da içerir. Daha açık belirtmek gerekirse, forma eklenen ilk BindingSourceyöntemi çağırırEndEdit. Başka bir deyişle, bu kod yalnızca Veri Kaynakları penceresinden forma sürüklenen ilk tablo için oluşturulur. Çağrı, EndEdit şu anda düzenlenmekte olan veriye bağlı denetimlerde devam eden değişiklikleri işler. Bu nedenle, veriye bağlı bir denetimin odağı hala varsa ve Kaydet düğmesine tıklarsanız, bu denetimdeki bekleyen tüm düzenlemeler gerçek kaydetmeden önce işlenir (TableAdapterManager.UpdateAllyöntemi).

Not

Veri Kümesi Tasarımcısı yalnızca forma bırakılan ilk tablonun kodunu eklerBindingSource.EndEdit. Bu nedenle, formdaki ilgili her tablo için yöntemini çağırmak BindingSource.EndEdit için bir kod satırı eklemeniz gerekir. Bu izlenecek yol için yöntemine bir çağrı OrdersBindingSource.EndEdit eklemeniz gerekir.

  1. Form1'i Kod Düzenleyicisi'nde açmak için üzerindeki Kaydet düğmesine BindingNavigator çift tıklayın.

  2. yöntemini çağıran CustomersBindingSource.EndEdit satırdan sonra yöntemini çağırmak OrdersBindingSource.EndEdit için bir kod satırı ekleyin. Kaydet düğmesi tıklama olayındaki kod aşağıdakine benzer olmalıdır:

    this.Validate();
    this.customersBindingSource.EndEdit();
    this.ordersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    

Verileri veritabanına kaydetmeden önce ilgili alt tabloya değişiklikleri işlemeye ek olarak, bir veri kümesine yeni alt kayıtlar eklemeden önce yeni oluşturulan üst kayıtları da işlemeniz gerekebilir. Başka bir deyişle, yabancı anahtar kısıtlamaları veri kümesine yeni alt kayıtların (Customer) eklenmesini sağlamadan önce yeni üst kaydı (Orders) veri kümesine eklemeniz gerekebilir. Bunu başarmak için alt BindingSource.AddingNew olayı kullanabilirsiniz.

Not

Yeni üst kayıtları işlemeniz gerekip gerekmediği, veri kaynağınıza bağlanmak için kullanılan denetimin türüne bağlıdır. Bu kılavuzda, üst tabloya bağlanmak için tek tek denetimleri kullanırsınız. Bu, yeni üst kaydı işlemek için ek kodu gerektirir. Bunun yerine üst kayıtlar gibi DataGridViewkarmaşık bir bağlama denetiminde görüntüleniyorsa, üst kayıt için bu ek EndEdit çağrı gerekli olmaz. Bunun nedeni, denetimin temel alınan veri bağlama işlevinin yeni kayıtların işlenmesini işlemesidir.

Yeni alt kayıtlar eklemeden önce veri kümesinde üst kayıtları işlemeye kod eklemek için

  1. Olay için bir olay işleyicisi OrdersBindingSource.AddingNew oluşturun.

    • Form1'i tasarım görünümünde açın, bileşen tepsisinde OrdersBindingSource'ı seçin, Özellikler penceresinde Olaylar'ı seçin ve ardından EklemeYeni olayına çift tıklayın.
  2. yöntemini çağıran CustomersBindingSource.EndEdit olay işleyicisine bir kod satırı ekleyin. Olay işleyicisindeki OrdersBindingSource_AddingNew kod aşağıdakine benzer olmalıdır:

    this.customersBindingSource.EndEdit();
    

TableAdapterManager başvurusu

Varsayılan olarak, ilgili tabloları içeren bir TableAdapterManager veri kümesi oluşturduğunuzda bir sınıf oluşturulur. Sınıfın oluşturulmasını önlemek için veri kümesinin özelliğinin Hierarchical Update değerini false olarak değiştirin. İlişkisi olan bir tabloyu Bir Windows Formu veya WPF sayfasının tasarım yüzeyine sürüklediğinizde, Visual Studio sınıfının bir üye değişkenini bildirir. Veri bağlamayı kullanmıyorsanız değişkeni el ile bildirmeniz gerekir.

sınıfı TableAdapterManager bir .NET türü değildir. Bu nedenle, belgelerde arama yapamazsınız. Veri kümesi oluşturma işleminin bir parçası olarak tasarım zamanında oluşturulur.

Sınıfın sık kullanılan yöntemleri ve özellikleri TableAdapterManager şunlardır:

Üye Açıklama
UpdateAll yöntem Tüm veri tablolarındaki tüm verileri kaydeder.
BackUpDataSetBeforeUpdate mülk yöntemini yürütmeden TableAdapterManager.UpdateAll önce veri kümesinin yedek kopyasının oluşturulup oluşturulmayacağını belirler. Boolean.
tableName TableAdapter özelliği bir TableAdapteröğesini temsil eder. Oluşturulan TableAdapterManager , yönettiği her TableAdapter bir özellik için bir özellik içerir. Örneğin, Müşteriler ve Siparişler tablosu içeren bir veri kümesi ve OrdersTableAdapter özellikleri içeren CustomersTableAdapter bir TableAdapterManager veri kümesi oluşturulur.
UpdateOrder mülk Tek tek ekleme, güncelleştirme ve silme komutlarının sırasını denetler. Bunu numaralandırmadaki TableAdapterManager.UpdateOrderOption değerlerden birine ayarlayın.

varsayılan olarak InsertUpdateDelete UpdateOrderolarak ayarlanır. Başka bir deyişle veri kümesindeki tüm tablolar için eklemeler, güncelleştirmeler ve silme işlemleri gerçekleştirilir.