Bu konu için en güzel örnek kategori mantığıdır. Aynı tablo içinde kendine referans vererek recursive (özyinelemeli) fonksiyon özelliği kazandırılabilir. Yada klasör örneği iç içe sonsuz birden çok klasör olabilir.
public class Folder
{
public Guid Id { get; set; }
public string Name { get; set; }
public Folder Parent { get; set; }
public Guid? ParentId { get; set; }
public ICollection<Folder> SubFolders { get; } = new List<Folder>();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Folder>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x=> x.Name);
entity.HasOne(x=> x.Parent)
.WithMany(x=> x.SubFolders)
.HasForeignKey(x=> x.ParentId)
.IsRequired(false)
.OnDelete(DeleteBehavior.Restrict);
});
}
public class YemekTip : Tarihce
{
public int Id { get; set; }
public int? ParentYemekTipId { get; set; }
public string Tip { get; set; }
public string Aciklama { get; set; }
public float Ucret { get; set; }
public string Not { get; set; }
public virtual YemekTip ParentYemekTip { get; set; }
public ICollection<YemekTip> SubYemekTips { get; } = new List<YemekTip>();
public virtual ICollection<KullaniciYemekTip> KullaniciYemekTip { get; set; }
}
public class YemekTipleriConfiguration : IEntityTypeConfiguration<YemekTip>
{
public void Configure(EntityTypeBuilder<YemekTip> builder)
{
builder.ToTable(typeof(YemekTip).Name, "yemekhanerezervasyon");
builder
.HasOne(e => e.ParentYemekTip)
.WithMany(e => e.SubYemekTips)
.HasForeignKey(x=>x.ParentYemekTipId)
.IsRequired(false)
.OnDelete(DeleteBehavior.Restrict);
builder
.Property(e => e.Tip)
.IsRequired()
.HasMaxLength(10);
builder
.Property(e => e.Aciklama)
.IsRequired()
.HasMaxLength(2048);
builder.Property(e => e.Ucret)
.IsRequired();
builder
.Property(e => e.Not)
.IsRequired()
.HasMaxLength(2048);
}
}