Arkadaşlar merhaba MVC 5 çalışıyorum . Dökümanda entity Framework yapısı anlatılırken SatisContext adında bir class oluşturuluyor. Bu class DbContext sınıfının kalıtımını alıyor. Buraya kadar tamam . Ancak SatisConstructor metodu oluşturulup DbContext metodunun Constructor ı burda çağırılıyor. Aşağıdaki gibi :
public class SatisContext : DbContext {
public SatisContext () : base ("SatisVeritabanı") { }
}
Burdaki base ifadesiyle mi ordaki constructor çağırılmış oluyor? string tipinde SatisVeritabanı parametresi oluşturuluyor ama burda string olduğu belirtilmiyor, gerekmiyor mu? Ayrıca neden constructor oluşturma gereği duyuluyor?
base() inherit edilen classın constructor'ı anlamına gelir. içine "SatisVeritabanı" yazarsan o da string parametreli constructor olur. string olduğunu belirtmemesi normal zaten. herhangi bir metodu çağırırken de belirtmezsin çünkü.
constructor overloading deniyor buna.
neden constructora gerek duyuluyor dersen basit cevabı: veri tabanına bağlanmak için. (connectionstring veya db name geçer parametre.)
base() inherit edilen classın constructor'ı anlamına gelir. içine "SatisVeritabanı" yazarsan o da string parametreli constructor olur. string olduğunu belirtmemesi normal zaten. herhangi bir metodu çağırırken de belirtmezsin çünkü.
constructor overloading deniyor buna.
neden constructora gerek duyuluyor dersen basit cevabı: veri tabanına bağlanmak için. (connectionstring veya db name geçer parametre.)
Daha iyi şekillendi ama hala tam anlayamadığım, neden veri tabanı bağlantısı yapmak için constructor a ihtiyaç duyulduğu. Döküman da ingilizce olduğu için anlamadım, türkçe döküman var mı?
hocam bir nesne oluştururken constructor kullanırız, çünkü belirli değişkenleri varsayılan olarak atamak isteriz veya atıyorum bir Timer'ı obje oluşturulunca ayarlarız. bu da öyle işte DbContext nesnesi oluşturuyor ve bu nesneyi oluştururken gerekli string parametresini geçiriyor. bu sayede o constructor'da gerekli işlemler yapılıp veri tabanına bağlanabiliyoruz.
104. satırda string parametreli constructor. içinde önce string boş mu diye kontrol ediyor:https://github.com/aspnet/EntityFramework6/blob/master/src/Common/Check.cs sonra da InitializeLazyInternalContext metodunu çağırıyor: InitializeLazyInternalContext(new LazyInternalConnection(this, nameOrConnectionString));
... böyle bakabilirsin neler yaptığına.
özet olarak veri tabanı bağlantısı kurması gerektiği için obje oluşturulurken nereye bağlanacağını soruyor sana.
hocam bir nesne oluştururken constructor kullanırız, çünkü belirli değişkenleri varsayılan olarak atamak isteriz veya atıyorum bir Timer'ı obje oluşturulunca ayarlarız. bu da öyle işte DbContext nesnesi oluşturuyor ve bu nesneyi oluştururken gerekli string parametresini geçiriyor. bu sayede o constructor'da gerekli işlemler yapılıp veri tabanına bağlanabiliyoruz.
104. satırda string parametreli constructor. içinde önce string boş mu diye kontrol ediyor:https://github.com/aspnet/EntityFramework6/blob/master/src/Common/Check.cs sonra da InitializeLazyInternalContext metodunu çağırıyor: InitializeLazyInternalContext(new LazyInternalConnection(this, nameOrConnectionString));
... böyle bakabilirsin neler yaptığına.
özet olarak veri tabanı bağlantısı kurması gerektiği için obje oluşturulurken nereye bağlanacağını soruyor sana.
DbContext içeriğini bilemediğim için anlayamamışım. Sanki her constructor da veri tabanı bağlantısı yapılıyor gibi anladım önce. Şimdi tamam. Tabii base ifadesiyle inherit edilen sınıftaki constructor ın işaret edildiğini öğrenmiş oldum ayrıca. İlk linkteki sayfada anlaşılıyor ancak ikinci linkteki koddan pek bişey anlamadım maalesef. Ordaki dil c# mı ?
public static T? NotNull<T>(T? value, string parameterName) where T : struct
T? = herhangi bir Type (string int datetime veya kendi oluşturduğun bir class olabilir) ayrıca ? de o Type'ı nullable yapıyor. yani int olsun dediysen int? olarak alıyor. döndüren bir metod.
NotNull adı, <T> ise hangi tip üzerinde işlem yapacağı. parametrelerde T? value = yine aynı Type'ta nullable bir nesne. diğeri de normal bir parametre zaten.
where T : struct bu, "T bir struct ise" diyor. farkındaysan altında aynı adda where T : class'lı olanı var. bu da overloading. yani ben mesela bu metodu NotNull<myStruct>(...) //(myStruct adı üstünde bir struct.) şeklinde çağırırsam üstteki çalışır. ama şöyle çağırırsam: NotNull<myClass>(...) //bu durumda alttaki metod çalışır. çünkü istediğim tiplerden birisi struct, birisi class ve where T : şeklinde overloading yapabiliyoruz
umarım anlatabilmişimdir. anlamadıysan generic sınıflar diye aratıp bulabilirsin
public static T? NotNull<T>(T? value, string parameterName) where T : struct
T? = herhangi bir Type (string int datetime veya kendi oluşturduğun bir class olabilir) ayrıca ? de o Type'ı nullable yapıyor. yani int olsun dediysen int? olarak alıyor. döndüren bir metod.
NotNull adı, <T> ise hangi tip üzerinde işlem yapacağı. parametrelerde T? value = yine aynı Type'ta nullable bir nesne. diğeri de normal bir parametre zaten.
where T : struct bu, "T bir struct ise" diyor. farkındaysan altında aynı adda where T : class'lı olanı var. bu da overloading. yani ben mesela bu metodu NotNull<myStruct>(...) //(myStruct adı üstünde bir struct.) şeklinde çağırırsam üstteki çalışır. ama şöyle çağırırsam: NotNull<myClass>(...) //bu durumda alttaki metod çalışır. çünkü istediğim tiplerden birisi struct, birisi class ve where T : şeklinde overloading yapabiliyoruz
umarım anlatabilmişimdir. anlamadıysan generic sınıflar diye aratıp bulabilirsin
MVC 5 çalışıyorum . Dökümanda entity Framework yapısı anlatılırken SatisContext adında bir class oluşturuluyor. Bu class DbContext sınıfının kalıtımını alıyor. Buraya kadar tamam . Ancak SatisConstructor metodu oluşturulup DbContext metodunun Constructor ı burda çağırılıyor. Aşağıdaki gibi :
public class SatisContext : DbContext
{
public SatisContext () : base ("SatisVeritabanı") { }
}
Burdaki base ifadesiyle mi ordaki constructor çağırılmış oluyor? string tipinde SatisVeritabanı parametresi oluşturuluyor ama burda string olduğu belirtilmiyor, gerekmiyor mu? Ayrıca neden constructor oluşturma gereği duyuluyor?