Visual Studio kullanarak .NET Framework uygulamalarında nesneleri veri kaynağı olarak bağlama

Uyarı

Sınıf DataSet 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. Teknolojiler ö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ümeleri başarısı kanıtlanmış bir teknoloji olsa da, yeni .NET uygulamaları için önerilen yaklaşım Entity Framework Core kullanmaktır. 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.

Visual Studio, özel nesnelerle uygulamanızda veri kaynağı olarak çalışmak için tasarım zamanı araçları sağlar. Veritabanı verilerini ui denetimlerine bağladığınız bir nesnede depolamak istediğinizde, önerilen yaklaşım sınıfı veya sınıfları oluşturmak için Entity Framework'ün kullanılmasıdır. Entity Framework, tüm ortak değişiklik izleme kodunu otomatik olarak oluşturur. Bu, DbSet nesnesinde AcceptChanges'i çağırdığınızda yerel nesnelerdeki tüm değişikliklerin otomatik olarak veritabanında kalıcı olduğu anlamına gelir. Daha fazla bilgi için bkz. Entity Framework Belgeleri.

Tavsiye

Bu makaledeki nesne bağlama yaklaşımları yalnızca uygulamanız zaten veri kümelerini temel aldıysa dikkate alınmalıdır. Veri kümelerini zaten biliyorsanız ve işleyecek olduğunuz veriler tablosal ve çok karmaşık veya çok büyük değilse bu yaklaşımları da kullanabilirsiniz. DataReader kullanarak verileri doğrudan nesnelere yükleme ve kullanıcı arabirimini veri bağlama olmadan el ile güncelleştirme gibi daha basit bir örnek için bkz. ADO.NET kullanarak basit bir veri uygulaması oluşturma.

Nesne gereksinimleri

Özel nesnelerin Visual Studio'daki veri tasarımı araçlarıyla çalışması için tek gereksinim, nesnenin en az bir ortak özelliğe ihtiyacı olmasıdır.

Özel nesneler genellikle bir uygulama için veri kaynağı görevi görmesi için belirli arabirimler, oluşturucular veya öznitelikler gerektirmez. Ancak, veriye bağlı bir denetim oluşturmak için nesneyi Veri Kaynakları penceresinden tasarım yüzeyine sürüklemek istiyorsanız ve nesne ITypedList veya IListSource arabirimlerini uyguluyorsa, nesnenin varsayılan bir oluşturucuya sahip olması gerekir. Aksi takdirde, Visual Studio veri kaynağı nesnesinin örneğini oluşturamaz ve öğeyi tasarım yüzeyine sürüklediğinizde bir hata görüntüler.

Özel nesneleri veri kaynağı olarak kullanma örnekleri

Veri kaynağı olarak nesnelerle çalışırken uygulama mantığınızı uygulamanın sayısız yolu olsa da, SQL veritabanları için Visual Studio tarafından oluşturulan TableAdapter nesneleri kullanılarak basitleştirilebilen birkaç standart işlem vardır. Bu sayfada TableAdapters kullanarak bu standart işlemlerin nasıl uygulanacakları açıklanmaktadır. Özel nesnelerinizi oluşturmak için bir kılavuz olarak tasarlanmamıştır. Örneğin, nesnelerinizin belirli bir uygulamasına veya uygulamanın mantığına bakılmaksızın genellikle aşağıdaki standart işlemleri gerçekleştirirsiniz:

  • Nesnelere (genellikle bir veritabanından) veri yükleme.

  • Yazılan bir nesne koleksiyonu oluşturma.

  • Bir koleksiyona nesne ekleme ve koleksiyondan nesneleri kaldırma.

  • Nesne verilerini formdaki kullanıcılara görüntüleme.

  • Nesnedeki verileri değiştirme/düzenleme.

  • Nesnelerdeki verileri veritabanına geri kaydetme.

Nesnelere veri yükleme

Bu örnekte, TableAdapters kullanarak nesnelerinize veri yüklersiniz. Varsayılan olarak, TableAdapters bir veritabanından veri getiren ve veri tablolarını dolduran iki tür yöntemle oluşturulur.

  • yöntemi, TableAdapter.Fill mevcut bir veri tablosunu döndürülen verilerle doldurur.

  • yöntemi, TableAdapter.GetData verilerle doldurulmuş yeni bir veri tablosu döndürür.

Özel nesnelerinizi verilerle yüklemenin en kolay yolu yöntemini çağırmak TableAdapter.GetData , döndürülen veri tablosundaki satır koleksiyonunda döngü yapmak ve her nesneyi her satırdaki değerlerle doldurmaktır. TableAdapter'a GetData eklenen herhangi bir sorgu için doldurulmuş veri tablosu döndüren bir yöntem oluşturabilirsiniz.

Uyarı

Visual Studio, TableAdapter sorgularını FillGetData varsayılan olarak adlandırır, ancak bu adları geçerli herhangi bir yöntem adıyla değiştirebilirsiniz.

Aşağıdaki örnekte, veri tablosundaki satırlar arasında döngü gerçekleştirme ve nesneyi verilerle doldurma adımları gösterilmektedir:

private void LoadCustomers()
{
    NorthwindDataSet.CustomersDataTable customerData = 
        customersTableAdapter1.GetTop5Customers();
    
    foreach (NorthwindDataSet.CustomersRow customerRow in customerData)
    {
        Customer currentCustomer = new Customer();
        currentCustomer.CustomerID = customerRow.CustomerID;
        currentCustomer.CompanyName = customerRow.CompanyName;

        if (customerRow.IsAddressNull() == false)
        {
            currentCustomer.Address = customerRow.Address;
        }

        if (customerRow.IsCityNull() == false)
        {
            currentCustomer.City = customerRow.City;
        }

        if (customerRow.IsContactNameNull() == false)
        {
            currentCustomer.ContactName = customerRow.ContactName;
        }

        if (customerRow.IsContactTitleNull() == false)
        {
            currentCustomer.ContactTitle = customerRow.ContactTitle;
        }

        if (customerRow.IsCountryNull() == false)
        {
            currentCustomer.Country = customerRow.Country;
        }

        if (customerRow.IsFaxNull() == false)
        {
            currentCustomer.Fax = customerRow.Fax;
        }

        if (customerRow.IsPhoneNull() == false)
        {
            currentCustomer.Phone = customerRow.Phone;
        }

        if (customerRow.IsPostalCodeNull() == false)
        {
            currentCustomer.PostalCode = customerRow.PostalCode;
        }

        if (customerRow.IsRegionNull() == false)
        {
            currentCustomer.Region = customerRow.Region;
        }

        LoadOrders(currentCustomer);
        customerBindingSource.Add(currentCustomer);
    }
}

Tipli bir nesne koleksiyonu oluşturma

Nesneleriniz için koleksiyon sınıfları oluşturabilir veya BindingSource bileşeni tarafından otomatik olarak sağlanan yazılan koleksiyonları kullanabilirsiniz.

Nesneler için özel bir koleksiyon sınıfı oluştururken, BindingList<T> sınıfından devralmanızı öneririz. Bu genel sınıf, koleksiyonunuzu yönetmeye yönelik işlevselliğin yanı sıra Windows Forms'daki veri bağlama altyapısına bildirim gönderen olaylar oluşturma olanağı sağlar.

BindingSource içindeki otomatik olarak oluşturulan koleksiyon, tür tanımlı koleksiyonu için bir BindingList<T> kullanır. Uygulamanız ek işlevlere ihtiyaç duymazsa, koleksiyonunuzu içinde BindingSourcetutabilirsiniz. Daha fazla bilgi için BindingSource sınıfının List özelliğine bakın.

Uyarı

Koleksiyonunuz temel uygulaması tarafından sağlanmayan BindingList<T>işlevler gerektiriyorsa, gerektiğinde sınıfına ekleyebilmek için özel bir koleksiyon oluşturmanız gerekir.

Aşağıdaki kod, kesin olarak türü belirlenmiş bir nesne koleksiyonu için sınıfın Order nasıl oluşturulacağını gösterir:

/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
    // Add any additional functionality required by your collection.
}

Koleksiyona nesne ekleme

Özelleştirilmiş koleksiyon sınıfınızın veya BindingSource yöntemini çağırarak bir koleksiyona Add nesneler eklersiniz.

Uyarı

Add yöntemi, öğesinden BindingList<T> devraldığınızda özel koleksiyonunuz için otomatik olarak sağlanır.

Türü belirtilen koleksiyona nesnelerin nasıl ekleneceği aşağıdaki kodda gösterilmektedir BindingSource.

Customer currentCustomer = new Customer();
customerBindingSource.Add(currentCustomer);

Aşağıdaki kod, BindingList<T> öğesinden devralan türetilmiş bir koleksiyona nasıl nesne ekleneceğini gösterir.

Uyarı

Bu örnekte, Orders koleksiyon nesnesinin Customer bir özelliğidir.

Order currentOrder = new Order();
currentCustomer.Orders.Add(currentOrder);

Koleksiyondan nesne kaldırma

Özel koleksiyon sınıfınızın veya BindingSource sınıfının Remove, RemoveAt yöntemlerini çağırarak bir koleksiyondan nesneleri kaldırırsınız.

Uyarı

BindingList<T> öğesinden devraldığınızda, Remove ve RemoveAt yöntemleri özel koleksiyonunuz için otomatik olarak sağlanır.

Aşağıdaki kod, BindingSource içindeki türü belirtilmiş koleksiyondaki nesneleri RemoveAt adlı yöntemle bulma ve kaldırma işlemini gösterir.

int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);

Nesne verilerini kullanıcılara görüntüleme

Nesnelerdeki verileri kullanıcılara görüntülemek için , Veri Kaynağı Yapılandırma sihirbazını kullanarak bir nesne veri kaynağı oluşturun ve ardından nesnenin tamamını veya tek tek özellikleri Veri Kaynakları penceresinden formunuza sürükleyin.

Nesnelerdeki verileri değiştirme

Windows Forms denetimlerine bağlı özel nesnelerdeki verileri düzenlemek için, bağlı denetimdeki (veya doğrudan nesnenin özelliklerindeki) verileri düzenlemeniz yeterlidir. Veri bağlama mimarisi nesnedeki verileri güncelleştirir.

Uygulamanız değişikliklerin izlenmesini ve önerilen değişikliklerin özgün değerlerinde geri döndürülebilmesini gerektiriyorsa, nesne modelinizde bu işlevi uygulamanız gerekir. Veri tablolarının önerilen değişiklikleri nasıl takip ettiğiyle ilgili örnekler için bkz DataRowState. , HasChangesve GetChanges.

Nesnelerdeki verileri veritabanına geri kaydetme

Nesnenizdeki değerleri TableAdapter'ın DBDirect yöntemlerine geçirerek verileri veritabanına geri kaydedin.

Visual Studio, doğrudan veritabanına karşı yürütülebilen DBDirect yöntemleri oluşturur. Bu yöntemler DataSet veya DataTable nesneleri gerektirmez.

TableAdapter DBDirect yöntemi Açıklama
TableAdapter.Insert Veritabanına yeni kayıtlar ekleyerek tek tek sütun değerlerini yöntem parametreleri olarak geçirmenizi sağlar.
TableAdapter.Update Veritabanındaki mevcut kayıtları güncelleştirir. Update yöntemi, özgün ve yeni sütun değerlerini yöntem parametresi olarak alır. Özgün değerler özgün kaydı bulmak için kullanılır ve yeni değerler bu kaydı güncelleştirmek için kullanılır.

TableAdapter.Update yöntemi, yöntem parametreleri olarak bir DataSet, DataTable, DataRow veya DataRow dizisi alarak bir veri kümesindeki değişiklikleri veritabanına geri döndürmek için de kullanılır.
TableAdapter.Delete Yöntem parametresi olarak geçirilen özgün sütun değerlerine göre veritabanından var olan kayıtları siler.

Bir nesne koleksiyonundaki verileri kaydetmek için, nesne koleksiyonunda döngü gerçekleştirin (örneğin, for-next döngüsü kullanarak). TableAdapter'ın DBDirect yöntemlerini kullanarak her nesnenin değerlerini veritabanına gönderin.

Aşağıdaki örnekte veritabanına doğrudan yeni müşteri eklemek için DBDirect yönteminin nasıl kullanılacağı TableAdapter.Insert gösterilmektedir:

private void AddNewCustomers(Customer currentCustomer)
{
    customersTableAdapter.Insert( 
        currentCustomer.CustomerID, 
        currentCustomer.CompanyName, 
        currentCustomer.ContactName, 
        currentCustomer.ContactTitle, 
        currentCustomer.Address, 
        currentCustomer.City, 
        currentCustomer.Region, 
        currentCustomer.PostalCode, 
        currentCustomer.Country, 
        currentCustomer.Phone, 
        currentCustomer.Fax);
}