﻿
{"id":24821,"date":"2022-04-16T15:48:17","date_gmt":"2022-04-16T15:48:17","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=24821"},"modified":"2022-04-16T15:48:17","modified_gmt":"2022-04-16T15:48:17","slug":"entity-framework-core-kalitimsal-durumlardaki-table-per-typetpt-ve-table-per-hierarchytph-davranis-modellemeleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-core-kalitimsal-durumlardaki-table-per-typetpt-ve-table-per-hierarchytph-davranis-modellemeleri\/","title":{"rendered":"Entity Framework Core &#8211; Kal\u0131t\u0131msal Durumlardaki Table Per Type(TPT) ve Table Per Hierarchy(TPH) Davran\u0131\u015f Modellemeleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde EF Core&#8217;un kal\u0131t\u0131msal durumlardaki davran\u0131\u015flar\u0131ndan olan Table Per Type(TPT) ve Table Per Hierarchy(TPH) modellemelerini inceliyor olaca\u011f\u0131z.<\/p>\n<h3>Table Per Type(TPT) Nedir?<\/h3>\n<p>Veritaban\u0131 a\u00e7\u0131s\u0131ndan bir tablodaki belirli kolonlar\u0131n ba\u011f\u0131ms\u0131z olarak birebir ili\u015fki ile farkl\u0131 tablolarda tutulmas\u0131d\u0131r. Bunun i\u00e7in EF Core taraf\u0131nda, merkezi tabloyu temsil eden bir t\u00fcrle\/s\u0131n\u0131fla kal\u0131t\u0131msal hiyerar\u015fide olan entity s\u0131n\u0131flar\u0131 olu\u015fturularak, ana s\u0131n\u0131f\/base class dahil t\u00fcm alt s\u0131n\u0131flara kar\u015f\u0131l\u0131k bir tablo generate edilmesiyle sa\u011flanan davran\u0131\u015ft\u0131r.<\/p>\n<p>Misal olarak a\u015fa\u011f\u0131daki, bir \u00fcr\u00fcn bilgisine kar\u015f\u0131l\u0131k olu\u015fturulan s\u0131n\u0131flar\u0131n modellemesini ele al\u0131rsak e\u011fer;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class ApplicationUser\r\n{\r\n    public int Id { get; set; }\r\n    public string Name { get; set; }\r\n}\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class Student : ApplicationUser\r\n{\r\n    public string School { get; set; }\r\n}\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class Teacher : ApplicationUser\r\n{\r\n    public string Branch { get; set; }\r\n}\r\n<\/pre>\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere esas\u0131nda t\u00fcm entity&#8217;ler bir tane kullan\u0131c\u0131ya kar\u015f\u0131l\u0131k gelecek tek bir veri tutmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Haliyle b\u00f6yle bir durumda bu entity&#8217;leri context nesnesine a\u015fa\u011f\u0131daki \u015fekilde bildirmemiz <em>Table Per Type<\/em> davran\u0131\u015f\u0131n\u0131 sergilememizi sa\u011flayacakt\u0131r.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class TPTExampleDb : DbContext\r\n{\r\n    .\r\n    .\r\n    .\r\n\r\n    public DbSet&lt;ApplicationUser&gt; Users { get; set; }\r\n    public DbSet&lt;Student&gt; Students { get; set; }\r\n    public DbSet&lt;Teacher&gt; Teachers { get; set; }\r\n    protected override void OnModelCreating(ModelBuilder modelBuilder)\r\n    {\r\n        \/\/Table Per Type(TPT)\r\n        modelBuilder.Entity&lt;Student&gt;().ToTable(&quot;StudentUsers&quot;);\r\n        modelBuilder.Entity&lt;Teacher&gt;().ToTable(&quot;TeacherUsers&quot;);\r\n    }\r\n}\r\n<\/pre>\n<\/div>\n<p>Dikkat ederseniz e\u011fer t\u00fcm entity&#8217;ler DbSet olarak eklenmi\u015f lakin alt modeller ise <code>OnModelCreating<\/code> i\u00e7erisinde <code>ToTable<\/code> olarak nitelendirilerek konfig\u00fcre edilmi\u015ftir. Bu \u00e7al\u0131\u015fman\u0131n neticesinde migration olu\u015fturup veritaban\u0131n\u0131 update edersek a\u015fa\u011f\u0131daki gibi bir tablo yap\u0131lanmas\u0131n\u0131n kuruldu\u011funu g\u00f6rece\u011fiz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri.png\" alt=\"Entity Framework Core - Kal\u0131t\u0131msal Durumlardaki Table Per Type(TPT) ve Table Per Hierarchy(TPH) Davran\u0131\u015f Modellemeleri\" width=\"494\" height=\"314\" class=\"aligncenter size-full wp-image-24843\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri.png 494w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-300x191.png 300w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/a>Unutulmamal\u0131d\u0131r ki, t\u00fcm alt s\u0131n\u0131flara kar\u015f\u0131l\u0131k <em>Table Per Type<\/em> davran\u0131\u015f\u0131nda birebir ili\u015fkide tablolar olu\u015fturulabilmesi i\u00e7in yukar\u0131daki gibi <code>ToTable<\/code> ile isimlendirilmeleri gerekmektedir. Bu zaruridir.<\/p>\n<p><strong><em>Peki hoca, Table Per Type davran\u0131\u015f\u0131nda CRUD i\u015flemlerini nas\u0131l yapaca\u011f\u0131z?<\/em><\/strong> \u015feklinde sorunuzu duyar gibiyim&#8230; Tabi ki de bunu g\u00f6stermeden ge\u00e7meyece\u011fiz \ud83d\ude42<\/p>\n<p>Bunun i\u00e7in tek yap\u0131lmas\u0131 gereken CRUD i\u015flemleri s\u00fcrecinde sadece alt s\u0131n\u0131flar\u0131 kullanmakt\u0131r.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing TPTExampleDb context = new();\r\nawait context.Students.AddAsync(new() { Name = &quot;Hilmi&quot;, School = &quot;Yozgat Ticaret Meslek Lisesi&quot; });\r\nawait context.Students.AddAsync(new() { Name = &quot;Furkan&quot;, School = &quot;Ka\u015f\u0131k\u00e7\u0131 Torna Tesviye Meslek Lisesi&quot; });\r\nawait context.Students.AddAsync(new() { Name = &quot;Ali&quot;, School = &quot;B\u00fclb\u00fclderesi Anadolu Meslek Lisesi&quot; });\r\nawait context.Teachers.AddAsync(new() { Name = &quot;Emrah&quot;, Branch = &quot;Matematik&quot; });\r\nawait context.Teachers.AddAsync(new() { Name = &quot;Engin&quot;, Branch = &quot;M\u00fczik&quot; });\r\nawait context.Teachers.AddAsync(new() { Name = &quot;Erol&quot;, Branch = &quot;Dayak&quot; });\r\nawait context.SaveChangesAsync();\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-2.png\" alt=\"Entity Framework Core - Kal\u0131t\u0131msal Durumlardaki Table Per Type(TPT) ve Table Per Hierarchy(TPH) Davran\u0131\u015f Modellemeleri\" width=\"240\" height=\"313\" class=\"aligncenter size-full wp-image-24849\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-2.png 240w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-2-230x300.png 230w\" sizes=\"auto, (max-width: 240px) 100vw, 240px\" \/><\/a>Dikkat ederseniz e\u011fer verileri &#8216;Id&#8217; kolonu \u00fczerinden birebir olan bir ili\u015fkide tutmaktad\u0131r.<br \/>\nAyn\u0131 \u015fekilde veri okumak istedi\u011finizde de ilgili alt s\u0131n\u0131f\u0131 sorgulayabilirsiniz.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-1.png\" alt=\"Entity Framework Core - Kal\u0131t\u0131msal Durumlardaki Table Per Type(TPT) ve Table Per Hierarchy(TPH) Davran\u0131\u015f Modellemeleri\" width=\"360\" height=\"140\" class=\"aligncenter size-full wp-image-24847\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-1.png 360w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-1-300x117.png 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><\/p>\n<blockquote><p><em style=\"color:green;\">Table Per Type yakla\u015f\u0131m\u0131nda hiyerar\u015fik olarak ne kadar entity varsa o kadar derinlikte birebir ili\u015fkili tablo olu\u015fturulacakt\u0131r.<\/em><\/p><\/blockquote>\n<p>Ayr\u0131ca son olarak &#8216;Users&#8217; DbSet&#8217;i \u00fczerinden sorgulama yaparken sorguyu alt t\u00fcre indirgemek istiyorsan\u0131z e\u011fer a\u015fa\u011f\u0131daki gibi <code>OfType<\/code> metodundan istifade edebilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar users = await context.Users.ToListAsync();\r\nvar students = users.OfType&lt;Student&gt;().ToList();\r\nvar teachers = users.OfType&lt;Teacher&gt;().ToList();\r\n<\/pre>\n<\/div>\n<h3>Table Per Hierarchy (TPH) Nedir?<\/h3>\n<p>Bu davran\u0131\u015fta ise hiyerar\u015fi i\u00e7indeki t\u00fcm entity&#8217;ler i\u00e7in tek bir tablo olu\u015fturulmakta ve bu tabloda veriler tutulurken ortak olan yani base class&#8217;dan gelen alanlar doldurulmakta, olmayan alanlar i\u00e7in nullable \u015fart\u0131 gelmektedir. Yani bir ba\u015fka deyi\u015fle, veritaban\u0131ndaki bir tablo EF Core taraf\u0131nda birden fazla entity&#8217;nin b\u00fct\u00fcnsel haline kar\u015f\u0131l\u0131k gelmektedir diyebiliriz.<\/p>\n<p>Bu davran\u0131\u015fa da \u00f6rnek mahiyetinde yine yukar\u0131daki entity&#8217;lerden yola \u00e7\u0131karsak e\u011fer context nesnesi a\u015fa\u011f\u0131daki gibi tasarlanacakt\u0131r;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class TPHExampleDb : DbContext\r\n{\r\n    .\r\n    .\r\n    .\r\n\r\n    public DbSet&lt;ApplicationUser&gt; Users { get; set; }\r\n    public DbSet&lt;Student&gt; Students { get; set; }\r\n    public DbSet&lt;Teacher&gt; Teachers { get; set; }\r\n}\r\n<\/pre>\n<\/div>\n<p>Dikkat ederseniz <em>Table Per Hierarchy<\/em> davran\u0131\u015f\u0131 i\u00e7in <code>OnModelCreating<\/code> i\u00e7erisinde herhangi bir i\u015flem yapmaya gerek yoktur. Hiyerar\u015fik olarak tasarlanan t\u00fcm entity&#8217;lerin direkt olarak DbSet t\u00fcr\u00fcnde tan\u0131mlanmas\u0131 yeterlidir. Bu tan\u0131mlamadan sonra <code>OnModelCreating<\/code> i\u00e7erisinde <code>ToTable<\/code> i\u015flemi yaparsak bu <em>Table Per Type<\/em> davran\u0131\u015f\u0131na y\u00f6nlenecektir.<\/p>\n<p>Bu vaziyette migration olu\u015fturup, veritaban\u0131n\u0131 g\u00fcncellersek e\u011fer a\u015fa\u011f\u0131daki gibi bir tablo olu\u015fturulacakt\u0131r.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-3.png\" alt=\"Entity Framework Core - Kal\u0131t\u0131msal Durumlardaki Table Per Type(TPT) ve Table Per Hierarchy(TPH) Davran\u0131\u015f Modellemeleri\" width=\"499\" height=\"124\" class=\"aligncenter size-full wp-image-24863\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-3.png 499w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-3-300x75.png 300w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/a>Bu tabloda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere \u00fcst s\u0131n\u0131fla birlikte t\u00fcm alt s\u0131n\u0131flardaki property&#8217;ler tek bir tabloya kolon olarak eklenmi\u015f vaziyettedir.<\/p>\n<p>\u015eimdi buradan anla\u015f\u0131lan, ister &#8216;Student&#8217; ister &#8216;Teacher&#8217; verileri gelsin her ikisi de bu olu\u015fturulan &#8216;Users&#8217; tablosuna eklenecektir. Hal b\u00f6yleyken gelecek olan verinin hangi entity&#8217;e \u00f6zel oldu\u011funu ayr\u0131\u015ft\u0131rabilmek i\u00e7in EF Core taraf\u0131ndan eklenen <span style=\"color:red;\"><strong>Discriminator<\/strong><\/span> kolonunu g\u00f6rmekteyiz. Bu kolonda gelen verinin hangi entity taraf\u0131ndan kay\u0131t edildi\u011fine dair bilgi tutulacakt\u0131r.<\/p>\n<p>\u015e\u00f6yle ki;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing TPHExampleDb context = new();\r\nawait context.Students.AddAsync(new() { Name = &quot;Hilmi&quot;, School = &quot;Hac\u0131 H\u00fcseyin \u0130mam Hatip Lisesi&quot; });\r\nawait context.Students.AddAsync(new() { Name = &quot;Rauf&quot;, School = &quot;Laylaylom Galiba Sana G\u00f6re Sevmeler Lisesi&quot; });\r\nawait context.Teachers.AddAsync(new() { Name = &quot;Emine&quot;, Branch = &quot;Fizik&quot; });\r\nawait context.Teachers.AddAsync(new() { Name = &quot;Muiddin&quot;, Branch = &quot;Edebiyat&quot; });\r\nawait context.SaveChangesAsync();\r\n<\/pre>\n<\/div>\n<p>\u015feklinde veri ekledi\u011fimizde a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi hangi datan\u0131n hangi entity&#8217;den geldi\u011fini &#8216;Discriminator&#8217; kolonuna eklemekte ve ilgili t\u00fcr\u00fcn d\u0131\u015f\u0131ndaki alana null kar\u015f\u0131l\u0131\u011f\u0131n\u0131 vermektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-4.png\" alt=\"Entity Framework Core - Kal\u0131t\u0131msal Durumlardaki Table Per Type(TPT) ve Table Per Hierarchy(TPH) Davran\u0131\u015f Modellemeleri\" width=\"502\" height=\"110\" class=\"aligncenter size-full wp-image-24866\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-4.png 502w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/04\/Entity-Framework-Core-Kalitimsal-Durumlardaki-Table-Per-TypeTPT-ve-Table-Per-HierarchyTPH-Davranis-Modellemeleri-4-300x66.png 300w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/a>Sorgularken de yine direkt t\u00fcrler \u00fczerinden sorgulama yap\u0131labilece\u011fi gibi<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar students = await context.Students.ToListAsync();\r\nvar teachers = await context.Teachers.ToListAsync();\r\n<\/pre>\n<\/div>\n<p><code>OfType<\/code> fonksiyonu e\u015fli\u011finde de alt t\u00fcre indirgeyerek sorgulayabilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar students =  context.Users.OfType&lt;Student&gt;();\r\nvar teachers =  context.Users.OfType&lt;Teacher&gt;();\r\n<\/pre>\n<\/div>\n<p>Her iki \u015fekilde de ilgili tablodan entity t\u00fcr\u00fcne \u00f6zg\u00fc veriler ayr\u0131\u015ft\u0131r\u0131larak, getirilecektir.<\/p>\n<blockquote><p><em style=\"color:green;\">Table Per Hierarchy yakla\u015f\u0131m\u0131nda hiyerar\u015fik olarak entity derinli\u011fi fark etmeksizin t\u00fcm t\u00fcrler tek bir tabloya yans\u0131t\u0131lacak ve aralar\u0131ndaki fark &#8216;Discriminator&#8217; kolonu sayesinde ayr\u0131\u015ft\u0131r\u0131lacakt\u0131r.<\/em><\/p><\/blockquote>\n<p>Nihai olarak,<br \/>\nEntity&#8217;ler aras\u0131ndaki kal\u0131t\u0131msal durum s\u00f6z konusuyken; <em>Table Per Type<\/em>, her tip\/entity&#8217;e kar\u015f\u0131l\u0131k bir tablo davran\u0131\u015f\u0131 sergilerken, <em>Table Per Hierarchy<\/em> ise her hiyerar\u015fiye kar\u015f\u0131l\u0131k bir tablo davran\u0131\u015f\u0131n\u0131 sergilemektedir.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : Makale s\u00fcrecinde kullan\u0131lan kodlar\u0131n kaynaklar\u0131n\u0131 a\u015fa\u011f\u0131daki Githup adreslerinden edinebilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/EF-Core-Table-Per-Type\" rel=\"noopener\" target=\"_blank\">EF Core Table Per Type<\/a><br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/EF-Core-Table-Per-Hierarchy\" rel=\"noopener\" target=\"_blank\">EF Core Table Per Hierarchy<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde EF Core&#8217;un kal\u0131t\u0131msal durumlardaki davran\u0131\u015flar\u0131ndan olan Table Per Type(TPT) ve Table Per Hierarchy(TPH) modellemelerini inceliyor olaca\u011f\u0131z. Table Per Type(TPT) Nedir? Veritaban\u0131 a\u00e7\u0131s\u0131ndan bir tablodaki belirli kolonlar\u0131n ba\u011f\u0131ms\u0131z olarak birebir ili\u015fki ile&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":11538,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4446,2914],"tags":[2851,4564,4560,4565,4561,4562,4558,4563,4559],"class_list":["post-24821","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-6","category-entity-framework-core","tag-ef-core","tag-ef-core-table-per-hierarchy","tag-ef-core-table-per-type","tag-ef-core-tph","tag-ef-core-tpt","tag-table-per-hierarchy","tag-table-per-type","tag-tph","tag-tpt"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/24821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=24821"}],"version-history":[{"count":42,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/24821\/revisions"}],"predecessor-version":[{"id":24869,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/24821\/revisions\/24869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/11538"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=24821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=24821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=24821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}