Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu izlenecek yol, veritabanındaki yabancı anahtar ilişkilerini temsil etmek için LINQ to SQL ilişkilendirmelerinin kullanımını gösterir.
Uyarı
Bilgisayarınız, aşağıdaki yönergelerde bazı Visual Studio kullanıcı arabirimi öğeleri için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için bkz. IDE'yi Kişiselleştirme.
Bu kılavuz Visual C# Geliştirme Ayarları kullanılarak yazılmıştır.
Önkoşullar
İzlenecek Yol: Basit Nesne Modeli ve Sorgu (C#) işlemini tamamlamış olmanız gerekir. Bu kılavuz, c:\linqtest5'te northwnd.mdf dosyasının bulunmasını da içeren önceki kılavuzun üzerine inşa edilmiştir.
Genel Bakış
Bu izlenecek yol üç ana görevden oluşur:
Örnek Northwind veritabanında Orders tablosunu temsil eden bir varlık sınıfı ekleme.
İlişkiyi geliştirmek amacıyla
Customersınıfına,CustomerveOrdersınıfları arasındaki ek açıklamalar ekleme.sınıfını kullanarak
Orderbilgi almayıCustomertest etmek için sorgu oluşturma ve çalıştırma.
Tablolar Arasında İlişkileri Eşleme
Sınıf tanımı Customer oluşturulduktan sonra, Order varlık sınıfı tanımını oluşturun ve bu tanımda Order.Customer'nin, Customer.CustomerID ile yabancı anahtar olarak ilişkili olduğunu gösteren aşağıdaki kodu ekleyin.
Order varlık sınıfını eklemek için
Customersınıfının ardından aşağıdaki kodu yazın veya yapıştırın.[Table(Name = "Orders")] public class Order { private int _OrderID = 0; private string _CustomerID; private EntityRef<Customer> _Customer; public Order() { this._Customer = new EntityRef<Customer>(); } [Column(Storage = "_OrderID", DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] public int OrderID { get { return this._OrderID; } // No need to specify a setter because IsDBGenerated is // true. } [Column(Storage = "_CustomerID", DbType = "NChar(5)")] public string CustomerID { get { return this._CustomerID; } set { this._CustomerID = value; } } [Association(Storage = "_Customer", ThisKey = "CustomerID")] public Customer Customer { get { return this._Customer.Entity; } set { this._Customer.Entity = value; } } }
Müşteri Sınıfına Açıklama Ekleme
Bu adımda, Customer sınıfına Order sınıfıyla olan ilişkisini göstermek için etiketleme yaparsınız. (İlişkiyi her iki yönde tanımlamak bağlantıyı oluşturmak için yeterli olduğundan bu ekleme kesinlikle gerekli değildir. Ancak bu ek açıklamayı eklemek, nesnelerde her iki yönde de kolayca gezinmenizi sağlar.)
Customer sınıfına açıklama eklemek için
Sınıfına aşağıdaki kodu yazın veya yapıştırın
Customer:private EntitySet<Order> _Orders; public Customer() { this._Orders = new EntitySet<Order>(); } [Association(Storage = "_Orders", OtherKey = "CustomerID")] public EntitySet<Order> Orders { get { return this._Orders; } set { this._Orders.Assign(value); } }
Customer-Order İlişkisinde Sorgu Oluşturma ve Çalıştırma
Artık Order nesnelere doğrudan Customer nesnelerden veya ters sırada erişebilirsiniz. Müşteriler ve siparişler arasında açık bir birleşime ihtiyacınız yoktur.
Order nesnelerine erişmek için Müşteri nesnelerini kullanmak
yöntemine
Mainaşağıdaki kodu yazarak veya yapıştırarak yöntemini değiştirin:// Query for customers who have placed orders. var custQuery = from cust in Customers where cust.Orders.Any() select cust; foreach (var custObj in custQuery) { Console.WriteLine("ID={0}, Qty={1}", custObj.CustomerID, custObj.Orders.Count); }Uygulamanızda hata ayıklamak için F5 tuşuna basın.
Uyarı
Açıklama satırı yaparak
db.Log = Console.Out;Konsol penceresinde SQL kodunu ortadan kaldırabilirsiniz.Hata ayıklamayı durdurmak için Konsol penceresinde Enter tuşuna basın.
Veritabanınızın Güçlü Tipte Bir Görünümünü Oluşturma
Veritabanınızın kesin olarak belirlenmiş bir görünümüyle başlamak çok daha kolaydır. Nesneyi güçlü bir şekilde DataContext yazarak GetTable çağrı yapmanıza gerek kalmaz. Kesin tip tanımlı DataContext nesneyi kullandığınızda, tüm sorgularınızda kesin tip tanımlı tabloları kullanabilirsiniz.
Aşağıdaki adımlarda, veritabanındaki Müşteriler tablosuyla eşleşen, belirli bir türe sahip bir tablo olarak Customers oluşturacaksınız.
DataContext nesnesini kesin olarak yazmak için
Sınıf bildiriminin
Customerüzerine aşağıdaki kodu ekleyin.public class Northwind : DataContext { // Table<T> abstracts database details per table/data type. public Table<Customer> Customers; public Table<Order> Orders; public Northwind(string connection) : base(connection) { } }Mainyöntemini aşağıdaki gibi kesin olarak yazılanı DataContext kullanacak şekilde değiştirin:// Use a connection string. Northwind db = new Northwind(@"C:\linqtest5\northwnd.mdf"); // Query for customers from Seattle. var custQuery = from cust in db.Customers where cust.City == "Seattle" select cust; foreach (var custObj in custQuery) { Console.WriteLine($"ID={custObj.CustomerID}"); } // Freeze the console window. Console.ReadLine();Uygulamanızda hata ayıklamak için F5 tuşuna basın.
Konsol penceresi çıkışı şöyledir:
ID=WHITCHata ayıklamayı durdurmak için konsol penceresinde Enter tuşuna basın.
Sonraki Adımlar
Sonraki izlenecek yol (İzlenecek Yol: Verileri Düzenleme (C#)) verileri işlemeyi gösterir. Bu izlenecek yol, daha önce tamamlamış olduğunuz bu serideki iki kılavuzu kaydetmenizi gerektirmez.