İzlenecek yol: ADO.NET ve .NET Framework ile n katmanlı veri uygulaması oluşturma
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. 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ü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.
N katmanlı veri uygulamaları, verilere erişen ve birden çok mantıksal katmana veya katmana ayrılmış uygulamalardır. Uygulama bileşenlerini farklı katmanlara ayırmak uygulamanızın yönetilebilirliğini ve ölçeklenebilirliğini artırır. Bunu, tüm çözümü yeniden tasarlamanıza gerek kalmadan tek bir katmana uygulanabilen yeni teknolojilerin daha kolay benimsenmesini sağlayarak yapar. N katmanlı mimaride bir sunu katmanı, bir orta katman ve bir veri katmanı bulunur. Orta katmanda genellikle bir veri erişim katmanı, iş mantığı katmanı ve kimlik doğrulaması ve doğrulama gibi paylaşılan bileşenler bulunur. Veri katmanında ilişkisel bir veritabanı vardır. N katmanlı uygulamalar hassas bilgileri orta katmanın veri erişimi katmanında depolayarak sunu katmanına erişimi olan son kullanıcılardan uzakta tutulmasını sağlar. Daha fazla bilgi için bkz . N katmanlı veri uygulamalarına genel bakış.
N katmanlı uygulamada çeşitli katmanları ayırma yollarından biri, uygulamanıza eklemek istediğiniz her katman için ayrı projeler oluşturmaktır. Türü belirtilmiş veri kümelerinde, üretilen veri kümesinin ve DataSet Project
kodunun gitmesi gereken projeleri belirleyen bir TableAdapter
özelliği bulunur.
Bu kılavuz, Veri Kümesi Tasarımcısı'nı kullanarak veri kümesini ve TableAdapter
kodu ayrı sınıf kitaplığı projelerine ayırmayı gösterir. Veri kümesini ve TableAdapter kodunu ayırdıktan sonra, veri erişim katmanını çağırmak için Visual Studio hizmetinde bir Windows Communication Foundation Services ve WCF Veri Hizmetleri oluşturursunuz. Son olarak, sunu katmanı olarak bir Windows Forms uygulaması oluşturursunuz. Bu katman veri hizmetindeki verilere erişir.
Bu kılavuz sırasında aşağıdaki adımları gerçekleştirirsiniz:
Birden çok proje içeren yeni bir n katmanlı çözüm oluşturun.
N katmanlı çözüme iki sınıf kitaplığı ekleme.
Veri Kaynağı Yapılandırma Sihirbazı'nı kullanarak yazılan bir veri kümesi oluşturun.
Oluşturulan TableAdapters ve veri kümesi kodunu ayrık projelere ayırın.
Veri erişim katmanına çağrı göndermek için bir Windows Communication Foundation (WCF) hizmeti oluşturma.
Veri erişim katmanından veri almak için hizmet içinde işlevler oluşturma.
Sunu katmanı olarak hizmet verecek bir Windows Forms uygulaması oluşturma.
Veri kaynağına bağlanan Windows Forms denetimleri oluşturma.
Veri tablolarını doldurmak için kod yazma.
Önkoşullar
Bu öğreticiyi tamamlamak için Visual Studio'da yüklü .NET masaüstü geliştirme ve Veri depolama ve işleme iş yüklerine ihtiyacınız vardır. Bunları yüklemek için Visual Studio Yükleyicisi açın ve değiştirmek istediğiniz Visual Studio sürümünün yanındaki Değiştir (veya Daha Fazla>Değiştir) öğesini seçin. Bkz. Visual Studio'yu değiştirme.
Bu kılavuzda SQL Server Express LocalDB ve Northwind örnek veritabanı kullanılmaktadır.
SQL Server Express LocalDB'niz yoksa, SQL Server Express indirme sayfasından veya Visual Studio Yükleyicisi aracılığıyla yükleyin. Visual Studio Yükleyicisi, SQL Server Express LocalDB'yi .NET masaüstü geliştirme iş yükünün bir parçası olarak veya tek bir bileşen olarak yükleyebilirsiniz.
Aşağıdaki adımları izleyerek Northwind örnek veritabanını yükleyin:
Visual Studio'da SQL Server Nesne Gezgini penceresini açın. (SQL Server Nesne Gezgini, Visual Studio Yükleyicisi Veri depolama ve işleme iş yükünün bir parçası olarak yüklenir.) SQL Server düğümünü genişletin. LocalDB örneğinize sağ tıklayın ve Yeni Sorgu'yu seçin.
Sorgu düzenleyicisi penceresi açılır.
Northwind Transact-SQL betiğini panonuza kopyalayın. Bu T-SQL betiği, Northwind veritabanını sıfırdan oluşturur ve verilerle doldurur.
T-SQL betiğini sorgu düzenleyicisine yapıştırın ve ardından Yürüt düğmesini seçin.
Kısa bir süre sonra sorgunun çalışması tamamlanır ve Northwind veritabanı oluşturulur.
Visual Studio'da SQL Server Nesne Gezgini penceresini açın. (SQL Server Nesne Gezgini, Visual Studio Yükleyicisi Veri depolama ve işleme iş yükünün bir parçası olarak yüklenir.) SQL Server düğümünü genişletin. LocalDB örneğinize sağ tıklayın ve Yeni Sorgu'yu seçin.
LocalDB örneğini görmüyorsanız SQL Server Ekle araç çubuğu düğmesini kullanın. İletişim kutusu görüntülenir. İletişim kutusunda Yerel'i genişletin ve MSSQLLocalDB'yi seçin. Uygun kimlik bilgilerini girin. Veritabanı için varsayılan seçeneği bırakabilirsiniz.
Bağlan öğesini seçin. SQL Server Nesne Gezgini LocalDB için bir düğüm eklenir.
LocalDB örneğinize sağ tıklayın ve Yeni Sorgu'yu seçin.
Sorgu düzenleyicisi penceresi açılır.
Northwind Transact-SQL betiğini panonuza kopyalayın. Bu T-SQL betiği, Northwind veritabanını sıfırdan oluşturur ve verilerle doldurur.
T-SQL betiğini sorgu düzenleyicisine yapıştırın ve ardından Yürüt düğmesini seçin.
Kısa bir süre sonra sorgunun çalışması tamamlanır ve Northwind veritabanı oluşturulur.
Veri kümesini tutmak için n katmanlı çözüm ve sınıf kitaplığı oluşturma (DataEntityTier)
Bu kılavuzun ilk adımı bir çözüm ve iki sınıf kitaplığı projesi oluşturmaktır. İlk sınıf kitaplığı veri kümesini (oluşturulan yazılan DataSet
sınıf ve uygulamanın verilerini barındıran DataTable'lar) tutar. Bu proje uygulamanın veri varlık katmanı olarak kullanılır ve genellikle orta katmanda bulunur. Veri kümesi ilk veri kümesini oluşturur ve kodu otomatik olarak iki sınıf kitaplığına ayırır.
Not
Tamam'a tıklamadan önce projeyi ve çözümü doğru adlandırdığınızdan emin olun. Böylece bu kılavuzu tamamlamanız kolaylaşır.
N katmanlı çözüm ve DataEntityTier sınıf kitaplığı oluşturmak için
Visual Studio'da, C# veya Visual Basic için Windows Forms Uygulaması (.NET Framework) proje şablonunu kullanarak bir proje oluşturun. .NET Core, .NET 5 ve üzeri desteklenmez.
Projeyi DataEntityTier olarak adlandırın.
Çözümü NTierWalkthrough olarak adlandırın ve Tamam'ı seçin.
DataEntityTier projesini içeren bir NTierWalkthrough çözümü oluşturulur ve Çözüm Gezgini eklenir.
TableAdapters'ı (DataAccessTier) tutmak için sınıf kitaplığını oluşturma
DataEntityTier projesini oluşturduktan sonraki adım başka bir sınıf kitaplığı projesi oluşturmaktır. Bu proje, oluşturulan TableAdapters'ı barındırır ve uygulamanın veri erişim katmanı olarak adlandırılır. Veri erişim katmanında, veritabanına bağlanmak için gereken bilgiler bulunur ve genelde orta katmanda yer alır.
TableAdapters için ayrı bir sınıf kitaplığı oluşturmak için
Çözüm Gezgini'da çözüme sağ tıklayın ve Yeni Proje Ekle'yi> seçin.
Sınıf Kitaplığı (.NET Framework) proje şablonunu seçin.
Projeyi DataAccessTier olarak adlandırın ve Tamam'ı seçin.
DataAccessTier projesi oluşturulur ve NTierWalkthrough çözümüne eklenir.
Veri Kümesini Oluşturma
Sonraki adım türü belirtilmiş bir veri kümesi oluşturmaktır. Yazılan veri kümeleri hem veri kümesi sınıfı (sınıflar dahil DataTables
) hem de tek bir projedeki TableAdapter
sınıflarla oluşturulur. (Tüm sınıflar tek bir dosyada oluşturulur.) Veri kümesini ve TableAdapters'ı farklı projelere ayırdığınızda, diğer projeye taşınan veri kümesi sınıfıdır ve sınıflar TableAdapter
özgün projede bırakılır. Bu nedenle, sonunda TableAdapters'ı (DataAccessTier projesi) içerecek projede veri kümesini oluşturun. Veri Kaynağı Yapılandırma Sihirbazı'nı kullanarak veri kümesini oluşturursunuz.
Not
Bağlantıyı oluşturmak için Northwind örnek veritabanına erişiminiz olmalıdır. Northwind örnek veritabanını ayarlama hakkında bilgi için bkz . Nasıl yapılır: Örnek veritabanlarını yükleme.
Veri kümesi oluşturma
Çözüm Gezgini'da DataAccessTier'ı seçin.
Veri menüsünde Veri Kaynaklarını Göster'i seçin.
Veri Kaynakları penceresi açılır.
Veri Kaynağı Yapılandırma Sihirbazı'nı başlatmak için Veri Kaynakları penceresinde Yeni Veri Kaynağı Ekle'yi seçin.
Veri Kaynağı Türü Seçin sayfasında Veritabanı'nı ve ardından İleri'yi seçin.
Veri Bağlantınızı Seçin sayfasında aşağıdaki eylemlerden birini gerçekleştirin:
Açılan listede Northwind örnek veritabanına bir veri bağlantısı varsa seçin.
veya
Bağlantı Ekle iletişim kutusunu açmak için Yeni Bağlantı'ya tıklayın.
Veritabanı parola gerektiriyorsa, hassas verileri dahil etme seçeneğini belirleyin ve ardından İleri'yi seçin.
Not
Bir yerel veritabanı dosyası (SQL Server'a bağlanmak yerine) seçtiyseniz projeye dosya eklemek isteyip istemediğiniz sorulabilir. Veritabanı dosyasını projeye eklemek için Evet'i seçin.
Bağlantı Dizesini Uygulama Yapılandırma Dosyasına Kaydet sayfasında İleri'yi seçin.
Veritabanı Nesnelerinizi Seçin sayfasında Tablolar düğümünü genişletin.
Müşteriler ve Siparişler tablolarının onay kutularını seçin ve ardından Son'u seçin.
NorthwindDataSet, DataAccessTier projesine eklenir ve Veri Kaynakları penceresinde görüntülenir.
TableAdapters'i Veri Kümesinden ayırma
Veri kümesi oluşturduktan sonra, üretilen veri kümesi sınıfını TableAdapter bağdaştırıcılarından ayırın. Bunu yapmak için DataSet Projesi özelliğini ayrılmış veri kümesi sınıfının depolandığı projenin adına ayarlarsınız.
TableAdapter Bağdaştırıcılarını Veri Kümesinden ayırmak için
Veri kümesini Veri Kümesi Tasarımcısı'nda açmak için Çözüm Gezgini NorthwindDataSet.xsd dosyasına çift tıklayın.
Tasarımcıda boş bir alan seçin.
Özellikler penceresinde DataSet Projesi düğümünü bulun.
DataSet Projesi listesinde DataEntityTier'ı seçin.
Derle menüsünde Çözüm Derle'yi seçin.
Veri kümesi ve TableAdapter bağdaştırıcıları iki sınıf kitaplığı projesine ayrılır. Başlangıçta veri kümesinin tamamını (
DataAccessTier
) içeren proje artık yalnızca TableAdapters'ı içerir. DataSet Projesi özelliğinde (DataEntityTier
) belirlenen proje türü belirlenmiş veri kümesini içerir: NorthwindDataSet.Dataset.Designer.vb (veya NorthwindDataSet.Dataset.Designer.cs).
Not
Veri kümelerini ve TableAdapters'ı ayırdığınızda (DataSet Projesi özelliğini ayarlayarak), projedeki mevcut kısmi veri kümesi sınıfları otomatik olarak taşınmaz. Mevcut veri kümesi kısmi sınıflarının veri kümesi projesine el ile taşınması gerekir.
Yeni Hizmet Uygulaması Oluşturma
Bu izlenecek yol, bir WCF hizmeti kullanarak veri erişim katmanına erişmeyi gösterir, bu nedenle yeni bir WCF hizmet uygulaması oluşturalım.
Yeni bir WCF Hizmeti uygulaması oluşturmak için
Çözüm Gezgini'da çözüme sağ tıklayın ve Yeni Proje Ekle'yi> seçin.
Yeni Proje iletişim kutusundaki sol bölmede WCF'yi seçin. Orta bölmede WCF Hizmet Kitaplığı'nı seçin.
Projeyi DataService olarak adlandırın ve Tamam'ı seçin.
DataService projesi oluşturulur ve NTierWalkthrough çözümüne eklenir.
Müşteri ve sipariş verilerini döndürmek için veri erişim katmanında yöntemler oluşturma
Veri hizmetinin veri erişim katmanında iki yöntemi çağırması gerekir: GetCustomers
ve GetOrders
. Bu yöntemler Northwind Customers
ve Orders
tablolarını döndürür. Projede GetCustomers
DataAccessTier
ve GetOrders
yöntemlerini oluşturun.
Veri erişim katmanında Customers tablosunu döndüren bir yöntem oluşturmak için
Çözüm Gezgini'da NorthwindDataset.xsd'ye çift tıklayarak veri kümesini açın.
MüşterilerTabloAdapter'a sağ tıklayın ve Sorgu Ekle'ye tıklayın.
Komut Türü Seçin sayfasında SQL deyimlerini kullan'ın varsayılan değerini bırakın ve İleri'ye tıklayın.
Sorgu Türü Seçin sayfasında, satırları döndüren varsayılan SELECT değerini bırakın ve İleri'ye tıklayın.
SQL SELECT deyimi belirtin sayfasında varsayılan sorguyu bırakın ve İleri'ye tıklayın.
Oluşturulacak Yöntemleri Seçin sayfasında, DataTable Döndürme bölümüne Yöntem adı için GetCustomers yazın.
Finish (Son) düğmesine tıklayın.
Veri erişim katmanında Orders tablosunu döndüren bir yöntem oluşturmak için
OrdersTableAdapter'a sağ tıklayın ve Sorgu Ekle'ye tıklayın.
Komut Türü Seçin sayfasında SQL deyimlerini kullan'ın varsayılan değerini bırakın ve İleri'ye tıklayın.
Sorgu Türü Seçin sayfasında, satırları döndüren varsayılan SELECT değerini bırakın ve İleri'ye tıklayın.
SQL SELECT deyimi belirtin sayfasında varsayılan sorguyu bırakın ve İleri'ye tıklayın.
Oluşturulacak Yöntemleri Seçin sayfasında, DataTable Döndürme bölümüne Yöntem adı için GetOrders yazın.
Finish (Son) düğmesine tıklayın.
Yapı menüsünde Yapı Çözümü’ne tıklayın.
Veri hizmetine veri varlığına ve veri erişim katmanlarına başvuru ekleme
Veri hizmeti veri kümesinden ve TableAdapters'dan bilgi gerektirdiğinden DataEntityTier ve DataAccessTier projelerine başvurular ekleyin.
Veri hizmetine başvuru eklemek için
Çözüm Gezgini'da DataService'e sağ tıklayın ve Başvuru Ekle'ye tıklayın.
Başvuru Ekle iletişim kutusunda Projeler sekmesine tıklayın.
DataAccessTier ve DataEntityTier projelerini seçin.
Tamam'a tıklayın.
Veri erişim katmanında GetCustomers ve GetOrders yöntemlerini çağırmak için hizmete işlevler ekleyin
Şimdi veri erişim katmanında veri döndürme yöntemleri bulunduğuna göre, veri erişim katmanındaki yöntemleri çağırmak için veri hizmetinde yöntemler oluşturun.
Not
C# projelerinde aşağıdaki kodu derlemek için System.Data.DataSetExtensions
derlemesine bir başvuru eklemeniz gerekir.
Veri hizmetinde GetCustomers ve GetOrders işlevlerini oluşturmak için
DataService projesinde IService1.vb veya IService1.cs çift tıklayın.
Hizmet işlemlerinizi buraya ekleyin açıklamasının altına aşağıdaki kodu ekleyin:
[OperationContract] DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers(); [OperationContract] DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders();
Not
Bu öğreticinin kodu C# ve Visual Basic'te kullanılabilir. Bu sayfadaki kod dilini C# ve Visual Basic arasında değiştirmek için, sağ taraftaki sayfanın üst kısmındaki kod dili değiştiricisini kullanın.
DataService projesinde Service1.vb (veya Service1.cs) öğesine çift tıklayın.
Service1 sınıfına aşağıdaki kodu ekleyin:
public DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers() { DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter CustomersTableAdapter1 = new DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter(); return CustomersTableAdapter1.GetCustomers(); } public DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders() { DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter OrdersTableAdapter1 = new DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter(); return OrdersTableAdapter1.GetOrders(); }
Yapı menüsünde Yapı Çözümü’ne tıklayın.
Veri hizmetinden verileri görüntülemek için sunu katmanı oluşturma
Artık çözüm, veri erişim katmanını çağıran yöntemleri olan veri hizmetini içerdiğine göre, veri hizmetine çağrı yapan ve verileri kullanıcılara sunan başka bir proje oluşturun. Bu kılavuz için bir Windows Forms uygulaması oluşturun; bu n katmanlı uygulamanın sunu katmanıdır.
Sunu katmanı projesi oluşturmak için
Çözüm Gezgini'da çözüme sağ tıklayın ve Yeni Proje Ekle'yi> seçin.
Yeni Proje iletişim kutusundaki sol bölmede Windows Masaüstü'nü seçin. Orta bölmede Windows Forms Uygulaması'nı seçin.
Projeyi PresentationTier olarak adlandırın ve Tamam'a tıklayın.
PresentationTier projesi oluşturulur ve NTierWalkthrough çözümüne eklenir.
PresentationTier projesini başlangıç projesi olarak ayarlama
PresentationTier projesini çözümün başlangıç projesi olarak ayarlayacağız çünkü bu, verileri sunan ve verilerle etkileşim kuran gerçek istemci uygulamasıdır.
Yeni sunu katmanı projesini başlangıç projesi olarak ayarlamak için
- Çözüm Gezgini'da PresentationTier'a sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'ya tıklayın.
Sunu Katmanına Başvuru Ekleme
PresentationTier istemci uygulaması, hizmetteki yöntemlere erişmek için veri hizmetine bir hizmet başvurusu gerektirir. Buna ek olarak, WCF hizmeti tür paylaşımını etkinleştirmek için veri kümesine bir başvuru gerektirir. Veri hizmeti aracılığıyla tür paylaşımını etkinleştirene kadar, kısmi veri kümesi sınıfına eklenen kod sunu katmanında kullanılamaz. Genellikle satıra doğrulama kodu ve veri tablosunun sütun değiştirme olayları gibi kod eklediğinizden, bu koda istemciden erişmek isteyebilirsiniz.
Sunu katmanına bir başvuru eklemek için
Çözüm Gezgini'da Sunu Oluşturucu'ya sağ tıklayın ve Başvuru Ekle'yi seçin.
Başvuru Ekle iletişim kutusunda Projeler sekmesini seçin.
DataEntityTier'ı ve ardından Tamam'ı seçin.
Sunu katmanına bir hizmet başvurusu eklemek için
Çözüm Gezgini'de PresentationTier'a sağ tıklayın ve Hizmet Başvurusu Ekle'yi seçin.
Hizmet Başvurusu Ekle iletişim kutusunda Bul'a tıklayın.
Hizmet1'i ve ardından Tamam'ı seçin.
Not
Geçerli bilgisayarda birden çok hizmetiniz varsa, bu kılavuzda daha önce oluşturduğunuz hizmeti seçin (ve
GetOrders
yöntemlerini içerenGetCustomers
hizmet).
Veri hizmeti tarafından döndürülen verileri görüntülemek için forma DataGridViews ekleme
Hizmet başvurusunu veri hizmetine ekledikten sonra, Veri Kaynakları penceresi otomatik olarak hizmet tarafından döndürülen verilerle doldurulur.
Forma iki DataGridView veri bağlama öğesi eklemek için
Çözüm Gezgini'da PresentationTier projesini seçin.
Veri Kaynakları penceresinde NorthwindDataSet'i genişletin ve Müşteriler düğümünü bulun.
Müşteriler düğümünü Form1'e sürükleyin.
Veri Kaynakları penceresinde Müşteriler düğümünü genişletin ve ilgili Siparişler düğümünü (Müşteriler düğümünde iç içe yerleştirilmiş Siparişler düğümü) bulun.
İlgili Siparişler düğümünü Form1'e sürükleyin.
Formda boş bir alanı çift tıklayarak bir
Form1_Load
olay işleyicisi oluşturun.Olay işleyicisine
Form1_Load
aşağıdaki kodu ekleyin.
Hizmetin izin verdiği en büyük ileti boyutunu artırma
için maxReceivedMessageSize
varsayılan değer, ve Orders
tablolarından Customers
alınan verileri barındıracak kadar büyük değildir. Aşağıdaki adımlarda değeri 6553600'e yükselteceksiniz. hizmet başvurusunu otomatik olarak güncelleştiren istemcideki değeri değiştirirsiniz.
Not
Varsayılan alt sınır boyutu hizmet reddi (DoS) saldırılarına maruz kalmayı sınırlamak içindir. Daha fazla bilgi için bkz. MaxReceivedMessageSize.
MaxReceivedMessageSize değerini artırmak için
Çözüm Gezgini'da PresentationTier projesindeki app.config dosyasına çift tıklayın.
maxReceivedMessageSize özniteliğini bulun ve değerini olarak
6553600
değiştirin. GirdiyibasicHttpBinding
görmüyorsanız aşağıdaki örneğe benzer bir giriş ekleyin:<system.serviceModel> <bindings> <basicHttpBinding> <binding maxBufferSize="6553600" maxReceivedMessageSize="6553600" /> </basicHttpBinding> </bindings> </system.serviceModel>
Uygulamayı test etme
F5 tuşuna basarak uygulamayı çalıştırın. ve Orders
tablolarındaki Customers
veriler veri hizmetinden alınır ve formda görüntülenir.
Sonraki adımlar
Uygulama gereksinimlerinize bağlı olarak, ilgili verileri Windows tabanlı uygulamaya kaydettikten sonra gerçekleştirmek isteyebileceğiniz birkaç adım vardır. Örneğin, bu uygulamada aşağıdaki geliştirmeleri yapabilirsiniz:
Veri kümesine doğrulama ekleme.
Verileri tekrar veritabanında güncelleştirmek için hizmete ek yöntemler ekleme.