Bu makalede öğrenciye verilecek performans ve uygulama notlarını veritabanında saklamak için gerekli tablo tasarımlarını yapacağız. Daha sonra migration işlemi yaparak tabloların veri tabanına eklenmesini sağlayacağız. Aşağıda her bir tabloyu dikkate alarak gerekli C# sınıflarını, veri ilişkilerini ve migration komutlarını detaylı bir şekilde sunuyorum.
1. EF Core ile Tabloların Oluşturulması
Öncelikle, gerekli C# sınıflarını (model sınıflarını) oluşturmalıyız. Verdiğiniz tüm tablolara uygun sınıfları aşağıda paylaşıyorum.
2. Model Sınıflarını Oluşturun
Alan Tablosu
public class Alan
{
public int Id { get; set; }
public string AlanAdi { get; set; }
}
Dal Tablosu
public class Dal
{
public int Id { get; set; }
public string DalAdi { get; set; }
}
Grup Tablosu
public class Grup
{
public int Id { get; set; }
public string GrupAdi { get; set; }
}
Sinif Tablosu ile İlişkilendirme
Sinif tablosunda artık sadece Alan, Dal ve Grup tablolarına dış anahtar referansları (foreign key) olacak. Bu, sınıfın bu özellikleri isteğe bağlı olarak alabilmesini sağlar.
public class Sinif
{
public int Id { get; set; }
public string SinifAdi { get; set; }
public int? AlanId { get; set; }
public Alan Alan { get; set; }
public int? DalId { get; set; }
public Dal Dal { get; set; }
public int? GrupId { get; set; }
public Grup Grup { get; set; }
}
Ders Tablosu
public class Ders
{
public int Id { get; set; }
public string DersAdi { get; set; }
}
SinifListe Tablosu
public class SinifListe
{
public int Id { get; set; }
public int SinifId { get; set; }
public Sinif Sinif { get; set; }
public string OgrenciId { get; set; } // ÖğrenciId
public ApplicationUser Ogrenci { get; set; } // Öğrenci yerine ApplicationUser
public int NobetSayisi { get; set; }
}
DersAra Tablosu
public class DersAra
{
public int Id { get; set; }
public int DersId { get; set; }
public Ders Ders { get; set; }
public int SinifId { get; set; }
public Sinif Sinif { get; set; }
}
DersOgretmen Tablosu
public class DersOgretmen
{
public int Id { get; set; }
public int DersAraId { get; set; }
public DersAra DersAra { get; set; }
public string OgretmenId { get; set; } // ApplicationUser sınıfındaki kullanıcı ID'si
public ApplicationUser Ogretmen { get; set; } // Ogretmen yerine ApplicationUser
}
Uygulama Tablosu
public class Uygulama
{
public int Id { get; set; }
public string UygulamaAdi { get; set; }
public string UygulamaSorusu { get; set; }
public string UygulamaCevabi { get; set; }
public int DersId { get; set; }
public Ders Ders { get; set; }
}
Performans Tablosu
public class Performans
{
public int Id { get; set; }
public string PerformansAdi { get; set; }
}
PerformansKriteri Tablosu
public class PerformansKriteri
{
public int Id { get; set; }
public int PerformansId { get; set; }
public Performans Performans { get; set; }
public string KriterAdi { get; set; }
public string KriterAciklama { get; set; }
}
Sonuc Tablosu
public class Sonuc
{
public int Id { get; set; }
public string NotTipi { get; set; }
public DateTime Tarih { get; set; }
public float Notu { get; set; }
public string Aciklama { get; set; }
// Öğrenci ilişkisi: ApplicationUser ile ilişkilendirilecek
public string OgrenciId { get; set; } // OgrenciId yerine ApplicationUserId
public ApplicationUser Ogrenci { get; set; } // Ogrenci yerine ApplicationUser
// Uygulama ilişkisi
public int? UygulamaId { get; set; }
public Uygulama Uygulama { get; set; }
// Performans ilişkisi
public int? PerformansId { get; set; }
public Performans Performans { get; set; }
public string Cevap { get; set; }
// Öğretmen ilişkisi: ApplicationUser ile ilişkilendirilecek
public string OgretmenId { get; set; } // OgretmenId yerine ApplicationUserId
public ApplicationUser Ogretmen { get; set; } // Ogretmen yerine ApplicationUser
}
3. DbContext Sınıfı
Şimdi, tüm bu sınıfları bir DbContext içinde ilişkilendirmeniz gerekiyor:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Alan> Alanlar { get; set; }
public DbSet<Dal> Dallar { get; set; }
public DbSet<Grup> Gruplar { get; set; }
public DbSet<Sinif> Siniflar { get; set; }
public DbSet<Ders> Dersler { get; set; }
public DbSet<SinifListe> SinifListeleri { get; set; }
public DbSet<DersAra> DersAralar { get; set; }
public DbSet<DersOgretmen> DersOgretmenler { get; set; }
public DbSet<Uygulama> Uygulamalar { get; set; }
public DbSet<Performans> Performanslar { get; set; }
public DbSet<PerformansKriteri> PerformansKriterleri { get; set; }
public DbSet<Sonuc> Sonuclar { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Sabit GUID değerleri
string adminRoleId = "b9d7cb1f-1b53-4e97-b8b9-2f0db9d29f20"; // Sabit GUID
string teacherRoleId = "e78b3f3e-2336-4236-b66f-cd14d5b9d97e"; // Sabit GUID
string studentRoleId = "a76c7d1d-9b59-47c9-b913-0352672e7e55"; // Sabit GUID
builder.Entity<IdentityRole>().HasData(
new IdentityRole { Id = adminRoleId, Name = "Admin", NormalizedName = "ADMIN" },
new IdentityRole { Id = teacherRoleId, Name = "Teacher", NormalizedName = "TEACHER" },
new IdentityRole { Id = studentRoleId, Name = "Student", NormalizedName = "STUDENT" }
);
// Öğrenci (ApplicationUser) ilişkisi
builder.Entity<SinifListe>()
.HasOne(sl => sl.Ogrenci) // Ogrenci ilişkisi
.WithMany() // Many-to-one ilişki
.HasForeignKey(sl => sl.OgrenciId)
.OnDelete(DeleteBehavior.Cascade);
builder.Entity<Sonuc>()
.HasOne(s => s.Ogrenci) // Öğrenci ilişkisi
.WithMany() // Many-to-one ilişki
.HasForeignKey(s => s.OgrenciId);
builder.Entity<Sonuc>()
.HasOne(s => s.Ogretmen) // Öğretmen ilişkisi
.WithMany() // Many-to-one ilişki
.HasForeignKey(s => s.OgretmenId);
builder.Entity<DersOgretmen>()
.HasOne(s => s.Ogretmen) // Öğretmen ile ilişki
.WithMany(u => u.DersOgretmenler) // Bir Ogretmen birden fazla DersOgretmen'e sahip olabilir
.HasForeignKey(s => s.OgretmenId) // DersOgretmen'deki OgretmenId, ApplicationUser ile ilişkilendirilecek
.OnDelete(DeleteBehavior.Cascade); // Öğretmen silindiğinde DersOgretmen de silinsin
}
}
4. Migration Yapma
Şimdi EF Core kullanarak migration işlemini yapabiliriz. Aşağıdaki adımları takip edin:
Terminal veya Package Manager Console'u açın.
Aşağıdaki komutu yazın:
dotnet ef migrations add InitialCreateTables
Bu komut, veritabanı için gerekli tüm tablolara ve ilişkilere dayalı olarak bir migration oluşturur.
Veritabanını güncellemek için şu komutu kullanabilirsiniz:
dotnet ef database update
Bu, veritabanınızı oluşturur ve tablolara uygun şekilde günceller.
Sonuç:
Tüm tabloların ve ilişkilerinizi başarılı bir şekilde EF Core kullanarak oluşturmuş olduk. Şimdi veritabanınızda tabloları oluşturabilirsiniz ve ardından uygulamanızda bu modellere göre işlemleri gerçekleştirebilirsiniz.