C#

Entity Framework Code First Yaklaşımı

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda Entity Framework code first yaklaşımını anlatacağım. Hadi başlayalım !

Entity Framework Code First Nedir?

Entity Framework Code First, veritabanınızı kod tabanlı olarak tasarlamanızı sağlayan bir ORM (Object Relational Mapping) aracıdır. Bu yaklaşımda, veritabanı şemasını kodunuzdan türetirsiniz. Böylece, veritabanı şemanızı oluşturmak için SQL kodu yazmanız gerekmez.

Code First yaklaşımı, Entity Framework 4.1’de sunuldu ve Entity Framework 6.0’a kadar ana yaklaşım olarak kullanıldı. Ancak Entity Framework Core’da da kullanılabilmektedir.

Code First yaklaşımı, veritabanı şemanızı kodunuzdan türettiği için, geliştirme sürecini hızlandırır ve veritabanı şemanızı daha kolay yönetmenizi sağlar. Ayrıca, bu yaklaşımda kodunuza bağımlılığı azaltmak ve veritabanı bağımsızlığı sağlamak da daha kolaydır.

Code First Yaklaşımı Avantajları

Code First yaklaşımının birçok avantajı vardır. Bunlar arasında:

  • Veritabanı şemanızı kodunuzdan türettiği için, veritabanı şemanızı oluşturmak için SQL kodu yazmanız gerekmez. Bu, geliştirme sürecinizi hızlandırır.
  • Veritabanı şemanızı kodunuzdan türettiği için, veritabanı şemanızı daha kolay yönetmenizi sağlar.
  • Code First yaklaşımı, geliştirme sürecini daha kolay hale getirir ve kodunuzu daha okunaklı hale getirir.
  • Code First yaklaşımı, veritabanı bağımsızlığı sağlamak için idealdir. Bu yaklaşımda, veritabanı şemanızı kodunuzdan türettiğiniz için, veritabanı platformundan bağımsız hale gelirsiniz.
  • Code First yaklaşımı, sürdürülebilirlik için idealdir. Kodunuz ve veritabanınız birlikte geliştiğinden, değişiklikleri daha kolay yönetebilirsiniz.

Code First Yaklaşımı Nasıl Çalışır?

Code First yaklaşımında, veritabanı şemanızı kodunuzdan türetirsiniz. İlk olarak, DbContext sınıfınızı tanımlarsınız. DbContext sınıfı, veritabanınızla iletişim kurmanızı sağlar. Ayrıca, tablolarınızı da bu sınıf aracılığıyla tanımlarsınız.

Tablo sınıflarınız, DbContext sınıfınızda belirttiğiniz DbSet<T> özellikleri aracılığıyla belirtilir. Her DbSet<T> özelliği, veritabanındaki bir tabloya karşılık gelir. Örneğin, bir Kitaplar tablosuna sahip bir veritabanı tasarlamak istediğinizde, aşağıdaki gibi bir sınıf tanımlayabilirsiniz:

public class Kitap
{
    public int Id { get; set; }
    public string Adi { get; set; }
    public string Yazar { get; set; }
    public int SayfaSayisi { get; set; }
}

Daha sonra, DbContext sınıfınızda bu sınıfı DbSet<T> özelliği aracılığıyla belirtmeniz gerekir:

public class KitapContext : DbContext
{
    public DbSet<Kitap> Kitaplar { get; set; }
}

Burada, Kitaplar özelliği, Kitap sınıfına karşılık gelen bir DbSet<T> özelliğidir. Bu özellik, veritabanındaki Kitaplar tablosuna karşılık gelir.

Artık, veritabanınızı oluşturmak için Migration adı verilen bir Entity Framework özelliğinden yararlanabilirsiniz. Migration, veritabanınızın şemasını oluşturmanızı, güncellemenizi ve geri almanızı sağlar.

Migration kullanmak için, ilk olarak Entity Framework Core Tools paketini yüklemeniz gerekir. Daha sonra, aşağıdaki komutları kullanarak Migration özelliğinden yararlanabilirsiniz:

dotnet ef migrations add InitialCreate
dotnet ef database update

İlk komut, InitialCreate adlı bir Migration oluşturur. İkinci komut ise, veritabanınızı oluşturur veya günceller.

Migration özelliği, veritabanınızda yapılan değişiklikleri kodunuza da yansıtır. Bu nedenle, kodunuzu ve veritabanınızı birlikte yönetebilirsiniz.

Code First Yaklaşımıyla İlişkili Tabloların Oluşturulması

Code First yaklaşımıyla ilişkili tabloları yaratmak için, ilişki türünü belirtmeniz gerekir. İlişki türleri, Entity Framework Core’da aşağıdaki gibidir:

  • One-to-One: Bir kayıtın yalnızca bir diğer kayıtla ilişkisi varsa kullanılır.
  • One-to-Many: Bir kaydın birden fazla diğer kayıtla ilişkisi varsa kullanılır.
  • Many-to-Many: Birden fazla kaydın birden fazla diğer kayıtla ilişkisi varsa kullanılır.

Örneğin, bir Kullanici ve Kitaplar tablosuna sahip bir veritabanı tasarlamak istediğinizde, aşağıdaki gibi bir sınıf tanımlayabilirsiniz:

public class Kullanici
{
    public int Id { get; set; }
    public string KullaniciAdi { get; set; }
    public virtual ICollection<Kitap> Kitaplar { get; set; }
}

public class Kitap
{
    public int Id {get; set; }
    public string Adi { get; set; }
    public string Yazar { get; set; }
    public int SayfaSayisi { get; set; }
    public virtual ICollection<Kullanici> Kullanicilar { get; set; }
}

Burada, Kullanici sınıfında, Kitaplar özelliği bir ICollection özelliğidir. Bu özellik, Kullanici sınıfıyla Kitap sınıfı arasındaki One-to-Many ilişkisini temsil eder. Benzer şekilde, Kitap sınıfında, Kullanicilar özelliği bir ICollection özelliğidir. Bu özellik, Kitap sınıfıyla Kullanici sınıfı arasındaki Many-to-Many ilişkisini temsil eder.

Daha sonra, DbContext sınıfınızda bu sınıfları DbSet özelliği aracılığıyla belirtmeniz gerekir:

public class KitapContext : DbContext
{
    public DbSet<Kitap> Kitaplar { get; set; }
    public DbSet<Kullanici> Kullanicilar { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Kullanici>().HasMany(k => k.Kitaplar).WithOne(k => k.Kullanici).HasForeignKey(k => k.KullaniciId);

        modelBuilder.Entity<Kitap>().HasMany(k => k.Kullanicilar).WithMany(k => k.Kitaplar).UsingEntity(j => j.ToTable("KullaniciKitap"));
    }
}

Burada, OnModelCreating yöntemi, ilişki türlerini tanımlamak için kullanılır. HasMany ve WithOne yöntemleri, One-to-Many ilişkisi tanımlamak için kullanılır. HasMany ve WithMany yöntemleri, Many-to-Many ilişkisi tanımlamak için kullanılır. UsingEntity yöntemi, ara tablonun adını belirtmek için kullanılır.

Tabloların Güncellenmesi

Artık, veritabanınızı oluşturmak için Migration özelliğinden yararlanabilirsiniz. İlk komut, InitialCreate adlı bir Migration oluşturur. İkinci komut ise, veritabanınızı oluşturur veya günceller.

dotnet ef migrations add InitialCreate
dotnet ef database update

Bu örnek, Code First yaklaşımını kullanarak ilişkili tabloların nasıl yaratılacağını göstermektedir. Bu yaklaşım, veritabanı tasarımınızı kodunuza yansıtmak ve yönetmek için oldukça kullanışlıdır. Entity Framework Core’un sağladığı Migration özelliği, veritabanınızı güncellemek ve geri almak için oldukça kullanışlıdır.

Code First yaklaşımı, veritabanı tasarımınızı kodunuza yansıtmak için kullanışlı bir yaklaşımdır. Ancak, bu yaklaşımın kullanımı bazı zorluklar da ortaya çıkarabilir. Bu zorluklar, özellikle büyük ölçekli projelerde ortaya çıkabilir. Bu nedenle, Entity Framework Core, Code First yaklaşımının kullanımını kolaylaştırmak için bazı özellikler sunar.

Örneğin, Entity Framework Core, Migration özelliği ile veritabanı şeması değişikliklerini yönetmeyi kolaylaştırır. Migration, veritabanı değişikliklerini kodunuza yansıtan bir mekanizmadır. Migration özelliği, veritabanı değişikliklerini kod olarak kaydeder ve bu değişikliklerin uygulanmasını ve geri alınmasını sağlar.

Ayrıca, Entity Framework Core, Fluent API adı verilen bir API aracılığıyla ilişki tanımlama işlemini de kolaylaştırır. Fluent API, Code First yaklaşımını kullanarak ilişkileri belirlemenin alternatif bir yoludur. Bu API, Entity Framework Core’un DbContext sınıfında tanımlandığından, herhangi bir sınıfta kullanılabilir. Bu API, ilişkileri belirlemek için kullanılan özelliklerin bir listesini sağlar.

Örneğin, aşağıdaki kod örneğinde, Fluent API kullanarak bir One-to-Many ilişkisi tanımlanmaktadır:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Kullanici>().HasMany(k => k.Kitaplar).WithOne(k => k.Kullanici).HasForeignKey(k => k.KullaniciId);
}

Bu kod, önce Kullanici sınıfındaki Kitaplar özelliği için bir HasMany yöntemi çağırır. Bu yöntem, Kullanici sınıfının birçok Kitap nesnesi içerebileceğini belirtir. Ardından, Kitap sınıfındaki Kullanici özelliği için bir WithOne yöntemi çağırılır. Bu yöntem, Kitap sınıfının bir Kullanici nesnesine sahip olduğunu belirtir. Son olarak, Kitap sınıfındaki KullaniciId özelliği, ForeignKey yöntemiyle belirtilir.

Fluent API, birçok ilişki türünü destekler ve çok çeşitli ayarlamalar yapmanızı sağlar. Bu nedenle, Entity Framework Core’un Fluent API’si, Code First yaklaşımını kullanırken çok yararlı bir araçtır.

Attribute Mapping Özelliği

Attribute Mapping özelliği, sınıf ve özelliklere öznitelikler (attributes) ekleyerek veritabanı şemasını belirlemenize olanak tanır. Bu özellik, Fluent API’nin alternatifidir ve bazı durumlarda daha doğal bir yol sağlar.

Örneğin, aşağıdaki kod örneğinde, Kullanici ve Kitap sınıflarına Attribute Mapping özelliği kullanılarak veritabanı şeması belirtilmektedir:

public class Kullanici
{
    public int KullaniciId { get; set; }
    public string Ad { get; set; }

    [InverseProperty("Kullanici")]
    public ICollection<Kitap> Kitaplar { get; set; }
}

public class Kitap
{
    public int KitapId { get; set; }
    public string Ad { get; set; }

    public int KullaniciId { get; set; }
    public Kullanici Kullanici { get; set; }
}

Bu kodda, Kullanici sınıfındaki Kitaplar özelliği, InverseProperty özniteliği ile belirtilir. Bu öznitelik, Kitap sınıfındaki Kullanici özelliğiyle eşleştirilir ve bu ilişkinin Kullanici tarafından yönetildiğini belirtir.

Attribute Mapping, Fluent API ile benzer şekilde birçok ilişki türünü destekler. Ancak, Fluent API’den farklı olarak, Attribute Mapping özelliği, sınıf ve özelliklerdeki öznitelikler sayesinde daha doğal bir yapı sağlar.

Sonuç

Sonuç olarak, Entity Framework Code First yaklaşımı, veritabanı tasarımınızı kodunuza yansıtmak ve yönetmek için kullanışlı bir yaklaşımdır. Migration, Fluent API ve Attribute Mapping özellikleri gibi araçlar, Code First yaklaşımının kullanımını kolaylaştırır ve büyük özellikli projelerde daha esnek bir yaklaşım sunar.

Evet Entity Framework code first yaklaşımının teknik detayları bu şekilde. Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu