Nautilus Maceraları

Kişisel laboratuvar

Code First Relationship Kullanımı ve Avantajı

Merhaba arkadaşlar. Bugün sizlere Entity Framework ile Join ve Relation Mapping farkını anlatacağım. Senaryomuz gereği iller ve ilçeler adlı iki tablomuz(entity) olsun. Her ilçenin ilini görmek istediğimizde bunları Join Extension metodunu kullanarak birleştirmemiz gerekiyor.

İller Tablomuz 

public class Provinces
   {
       [Key]
       public int ProvinceId { get; set; }

       [StringLength(50)]
       public string ProvinceName { get; set; }

       public virtual ICollection<Cities> Cities { get; set; }
   }

İlçeler Tablomuz

public partial class Cities
   {
       [Key]
       public int CityId { get; set; }

       [StringLength(100)]
       public string CityName { get; set; }

       public int ProvinceId { get; set; }

       public virtual Provinces Provinces { get; set; }
   }

 

Aşağıda örnek bir Join kullanımı verilmiştir.

  • Bu kullanımda iki tablo için biraz kolay fakat birden fazla tablo kullanım söz konusu olduğunda işler biraz karışıyor. :D Merak etmeyin sadece 2 tablomuz olacak

    

private static void Join()
       {
           using (var db = new Model1())
           {
               db.Cities.Join(db.Provinces, c => c.ProvinceId, p => p.ProvinceId, (c, p) =>
                   new
                   {
                       c.CityName,
                       p.ProvinceName
                   }).ForEachAsync(item => Console.WriteLine("İl Adı : {0} İlçe Adı : {1}", item.ProvinceName, item.CityName));
     
               Console.ReadLine();
           }
       }

Burada ise ilişkili tablolarımız üzerinden direkt olarak erişebileceğimizi görmekteyiz. Püf noktamız ise virtual keyword’ü ile referans gösterdiğimiz tablolar.

Her ilin birden fazla ilçesi olacağı için ICollection veya IList arayüzlerini(Interface) kullanabiliriz.

public virtual ICollection<Cities> Cities { get; set; }

Ama her ilçenin bir tane ili olacağı için sadece bir virtual property yeterli.

public virtual Provinces Provinces { get; set; }
static void RelationSample()
{
   using (var db = new Model1())
   {
     db.Cities.ForEachAsync(city=>Console.WriteLine("İl Adı : {0} İlçe Adı : {1}", city.Provinces.ProvinceName, city.CityName));             
   }

Console.ReadLine();
}

 

Loading