Şimdi Ara

Entity Framework Oluşturma

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
7
Cevap
0
Favori
297
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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.)

    "ayrıntılı bilgi"https://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext(v=vs.113).aspx



    < Bu mesaj bu kişi tarafından değiştirildi VatandA.Ş. -- 8 Kasım 2016; 17:53:32 >
  • quote:

    Orijinalden alıntı: Microsoft Specialist

    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.)

    "ayrıntılı bilgi"https://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext(v=vs.113).aspx

    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ı?




  • soffmiss S kullanıcısına yanıt
    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.

    EF açık kaynak zaten şuradan constructor'lara ve ne işlem yaptığına bakabilirsin:
    https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs

    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.




  • quote:

    Orijinalden alıntı: Microsoft Specialist

    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.

    EF açık kaynak zaten şuradan constructor'lara ve ne işlem yaptığına bakabilirsin:
    https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs

    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ı ?




  • soffmiss S kullanıcısına yanıt
    c# hocam. generic'leri araştır anlarsın oraları.

    kısaca açıklamak gerekirse:

    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




  • quote:

    Orijinalden alıntı: Microsoft Specialist

    c# hocam. generic'leri araştır anlarsın oraları.

    kısaca açıklamak gerekirse:

    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

    çok teşekkür ederim




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.