{"id":498,"date":"2015-12-04T00:10:18","date_gmt":"2015-12-03T22:10:18","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=498"},"modified":"2016-10-27T10:36:15","modified_gmt":"2016-10-27T07:36:15","slug":"entity-framework-icin-profiler","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/entity-framework-icin-profiler\/","title":{"rendered":"Entity Framework i\u00e7in Profiler"},"content":{"rendered":"<p>Merhaba arkada\u015flar.<\/p>\n<p>Bu makalemde sizlere Entity Framework kullan\u0131larak\u00a0geli\u015ftirilmi\u015f olan\u00a0projelerde,\u00a0performans \u00f6l\u00e7\u00fcmleri ve refactoring&#8217;ler\u00a0yapabilmek ad\u0131na\u00a0Entity Framework i\u00e7in geli\u015ftirilmi\u015f olan bir Profiler arac\u0131n\u0131 tan\u0131taca\u011f\u0131m. Bu Profiler arac\u0131 her ne kadar \u00fccretli olsa da, 30 g\u00fcnl\u00fck bir trial s\u00fcr\u00fcm\u00fc i\u015fimizi g\u00f6rmektedir. Makalenin ilerleyen k\u0131s\u0131mlar\u0131nda neden free bir Profiler arac\u0131 se\u00e7medi\u011fimi anlayacaks\u0131n\u0131zd\u0131r.<\/p>\n<p>Database Administrator&#8217;lar i\u00e7in her ne kadar SQL Profiler arac\u0131 olmazsa olmazlar\u0131 ise, Entity Frameowork gibi g\u00fc\u00e7l\u00fc bir ORM arac\u0131n\u0131 kullanan biz developer&#8217;lar i\u00e7in ise <strong>Entity Framework Profiler<\/strong>&#8216;\u0131 olmazsa olmaz\u0131m\u0131z olmal\u0131d\u0131r. Peki neden olmazsa olmaz\u0131m\u0131z olmal\u0131d\u0131r, diyecek olur iseniz;<\/p>\n<blockquote><p>Entity Framework\u00a0gibi g\u00fc\u00e7l\u00fc bir ORM, database taraf\u0131ndaki neredeyse t\u00fcm i\u015flemlerimizi &#8220;<strong>kolayla\u015ft\u0131rmakta<\/strong>&#8221; ve geli\u015ftirmekte oldu\u011fumuz uygulamalar\u0131n &#8220;<strong>zaman<\/strong>&#8221; kavram\u0131n\u0131 olduk\u00e7a h\u0131zland\u0131rmaktad\u0131r bizler i\u00e7in. Peki her \u015fey &#8220;kolayla\u015ft\u0131rmak&#8221; ve &#8220;zaman&#8221; kavramlar\u0131 m\u0131d\u0131r? Biz bu iki kavrama odaklan\u0131rken as\u0131l mainset&#8217;imizde olmas\u0131 gereken &#8220;<strong>kalite<\/strong>&#8221; kavram\u0131ndan her ne kadar fark edemesek de bazen \u00f6d\u00fcn vermek durumunda kalabiliyoruz.\u00a0Biz bir developer olarak kullanm\u0131\u015f oldu\u011fumuz ORM&#8217;in, bizim hayat\u0131m\u0131z\u0131 kolayla\u015ft\u0131r\u0131rken bunun alt yap\u0131s\u0131ndaki Query Engine&#8217;inde neler olup bitiyor? LINQ Query&#8217;leri evaluator&#8217;dan ge\u00e7tikten sonra nas\u0131l Query&#8217;ler olu\u015fturuyor? gibi sorulara cevap verebilmeliyiz ki bu noktada performans nam\u0131na\u00a0iyile\u015ftirmeler\/refactoringler yapabilir\u00a0durumda\u00a0olabilmeliyiz.<\/p><\/blockquote>\n<p>\u015eimdi Profiler arac\u0131m\u0131z\u0131 biraz daha yak\u0131ndan tan\u0131yal\u0131m. Profiler arac\u0131m\u0131z\u0131n ad\u0131 <strong>EFProf<\/strong> olup\u00a0Hibernating Rhinos firmas\u0131 taraf\u0131ndan geli\u015ftirilmi\u015ftir. Hibernating Rhinos firmas\u0131n\u0131n ad\u0131 kula\u011fa her ne kadar yabanc\u0131 gelse de pop\u00fcler NoSQL veritabanlar\u0131 aras\u0131nda bulunan\u00a0dok\u00fcman tabanl\u0131\u00a0<strong>RavenDB<\/strong>&#8216;nin de geli\u015ftiricileridir.<\/p>\n<p>EFProf bize Entity Framework kullan\u0131rken arka planda neler olup bitti\u011fini, sorgular\u0131n nas\u0131l olu\u015ftu\u011funu, Query Planlar\u0131n\u0131n g\u00f6sterimi ve veritaban\u0131na eri\u015firken uygulamada performans kayb\u0131na neden\u00a0olabilecek Unbounded Result&#8217;lara\u00a0kadar de\u011ferli bilgileri verebilmektedir.<\/p>\n<p>\u015eimdi nas\u0131l kullanabilece\u011fimize bir bakal\u0131m.<\/p>\n<p>Kullan\u0131ma ge\u00e7meden \u00f6nce,\u00a0http:\/\/www.hibernatingrhinos.com\/products\/EFProf adresinden Download ederek sonras\u0131nda Try k\u0131sm\u0131ndan 30 g\u00fcnl\u00fck deneme lisans&#8217;\u0131n\u0131 elde edebilirsiniz.<\/p>\n<p>EFProf&#8217;u deneyebilmek ad\u0131na bir MVC projesi olu\u015fturarak a\u015fa\u011f\u0131da g\u00f6rebilece\u011finiz \u00fczere Entity Framework Model First yakla\u015f\u0131m\u0131 ile Designer \u00fczerinden a\u015fa\u011f\u0131daki gibi bir veritaban\u0131 yap\u0131s\u0131 olu\u015fturdum.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-499 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler.jpg\" alt=\"entity-framework-profiler\" width=\"661\" height=\"654\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler.jpg 661w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-300x297.jpg 300w\" data-sizes=\"(max-width: 661px) 100vw, 661px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 661px; --smush-placeholder-aspect-ratio: 661\/654;\" \/><\/a><\/p>\n<p>Veri modelimizi olu\u015fturduktan sonra EFProf&#8217;un kullan\u0131labilmesi i\u00e7in \u00f6nce projemize indirmi\u015f oldu\u011fumuz EFProf dosyas\u0131n\u0131n i\u00e7erisinde bulunan &#8220;<strong>HibernatingRhinos.Profiler.Appender.dll<\/strong>&#8221; assembly&#8217;sini projemize referans olarak ekliyoruz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/profiler-reference.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-500 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/profiler-reference.jpg\" alt=\"profiler-reference\" width=\"360\" height=\"221\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/profiler-reference.jpg 360w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/profiler-reference-300x184.jpg 300w\" data-sizes=\"(max-width: 360px) 100vw, 360px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 360px; --smush-placeholder-aspect-ratio: 360\/221;\" \/><\/a><\/p>\n<p>Appender assembly&#8217;sini projemize referans olarak ekledikten sonra, EFProf&#8217;un \u00e7al\u0131\u015fabilmesi i\u00e7in yapmam\u0131z gereken son bir ad\u0131m kald\u0131. Bu ad\u0131m uygulama ba\u015flad\u0131\u011f\u0131nda, EFProf&#8217;un kendisini ak\u0131\u015fa register edebilmesi i\u00e7in Global.asax&#8217;\u0131n Application_Start event&#8217;inde initialize etmeliyiz. A\u015fa\u011f\u0131daki kod blo\u011fu ile bu i\u015flemi kolayl\u0131kla ger\u00e7ekle\u015ftirebilmekteyiz.<\/p>\n<pre class=\"lang:c# decode:true\">    public class MvcApplication : System.Web.HttpApplication\r\n    {\r\n        protected void Application_Start()\r\n        {\r\n            AreaRegistration.RegisterAllAreas();\r\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\r\n\r\n            HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();\r\n        }\r\n    }<\/pre>\n<p>Evet hepsi bu kadar. \u015eimdi &#8220;<strong>ProductController<\/strong>&#8221; isminde \u00f6rnek bir controller ekliyorum ve i\u00e7erisine &#8220;<strong>LazyLoadingEnabledProductListResult<\/strong>&#8221; ve &#8220;<strong>EagerLoadingEnabledProductListResult<\/strong>&#8221; isminde iki method tan\u0131ml\u0131yorum. \u0130sminden de anla\u015f\u0131labilece\u011fi \u00fczere bu \u00f6rne\u011fimizdeki\u00a0amac\u0131m\u0131z; EFProf&#8217;un Entity Framework&#8217;\u00fcn <strong>Lazy Loading<\/strong> \u00f6zelli\u011fi a\u00e7\u0131kken nas\u0131l davrand\u0131\u011f\u0131 ve <strong>Eager Loading<\/strong> yaparken nas\u0131l davrand\u0131\u011f\u0131n\u0131 <strong>Profiler<\/strong> \u00fczerinden g\u00f6rebilmektir.<\/p>\n<pre class=\"lang:c# decode:true \">using System.Linq;\r\nusing System.Web.Mvc;\r\nusing EFProfilerTest.Models;\r\n\r\nnamespace EFProfilerTest.Controllers\r\n{\r\n    public class ProductController : Controller\r\n    {\r\n        \/\/ GET: Product\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n\r\n        public ActionResult LazyLoadingEnabledProductListResult()\r\n        {\r\n            EFProfilerTestContainer container = new EFProfilerTestContainer();\r\n            container.Configuration.LazyLoadingEnabled = true;\r\n\r\n            var productList = container.Products.ToList();\r\n\r\n            return View(productList);\r\n        }\r\n\r\n        public ActionResult EagerLoadingEnabledProductListResult()\r\n        {\r\n            EFProfilerTestContainer container = new EFProfilerTestContainer();\r\n\r\n            var productList = container.Products.Include(\"Brand\").ToList();\r\n\r\n            return View(productList);\r\n        }\r\n    }\r\n}<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda yapm\u0131\u015f oldu\u011fumuz i\u015flemler s\u0131ras\u0131yla Lazy Loading olan method i\u00e7erisinde <strong>Lazy Loading<\/strong>&#8216;i enabled hale getirmek, sonras\u0131nda ise Eager Loading i\u00e7in Brand tablosunu <strong>Include <\/strong>etmek. Bu controller&#8217;\u0131n view&#8217;lar\u0131nda ise haz\u0131r List Template&#8217;ini kulland\u0131m. Farkl\u0131 olarak tek yapt\u0131\u011f\u0131m i\u015flem model \u00fczerinden gelen <strong>Product<\/strong> listesini ekranda bir d\u00f6ng\u00fc ile d\u00f6nerken, <strong>Brand<\/strong>\u00a0isimli Navigation Property&#8217;si \u00fczerinden de, ekrana kategori ismini basmak oldu. Bunu yapmamdaki ama\u00e7 ise, Lazy ve Eager loading&#8217;leri g\u00f6rebilmektir.<\/p>\n<p>\u00d6rnek view a\u015fa\u011f\u0131daki \u015fekildedir:<\/p>\n<pre class=\"lang:c# decode:true \">@model IEnumerable&lt;EFProfilerTest.Models.Product&gt;\r\n\r\n@{\r\n    ViewBag.Title = \"LazyLoadingEnabledProductListResult\";\r\n    Layout = \"~\/Views\/Shared\/_Layout.cshtml\";\r\n}\r\n\r\n&lt;h2&gt;LazyLoadingEnabledProductListResult&lt;\/h2&gt;\r\n\r\n&lt;p&gt;\r\n    @Html.ActionLink(\"Create New\", \"Create\")\r\n&lt;\/p&gt;\r\n&lt;table class=\"table\"&gt;\r\n    &lt;tr&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Brand.Name)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Name)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Price)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Quantity)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.IsDelete)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.CreatedDate)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.LastModifyDate)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;&lt;\/th&gt;\r\n    &lt;\/tr&gt;\r\n\r\n@foreach (var item in Model) {\r\n    &lt;tr&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.Brand.Name)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.Name)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.Price)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.Quantity)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.IsDelete)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.CreatedDate)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.DisplayFor(modelItem =&gt; item.LastModifyDate)\r\n        &lt;\/td&gt;\r\n        &lt;td&gt;\r\n            @Html.ActionLink(\"Edit\", \"Edit\", new {\/* id=item.PrimaryKey *\/}) |\r\n            @Html.ActionLink(\"Details\", \"Details\", new {\/* id=item.PrimaryKey *\/}) |\r\n            @Html.ActionLink(\"Delete\", \"Delete\", new {\/* id=item.PrimaryKey *\/})\r\n        &lt;\/td&gt;\r\n    &lt;\/tr&gt;\r\n}\r\n\r\n&lt;\/table&gt;<\/pre>\n<p>\u015eimdi uygulamam\u0131z\u0131\u00a0LazyLoadingEnabledProductListResult action&#8217;\u0131 i\u00e7in startlad\u0131\u011f\u0131m\u0131zda &#8220;http:\/\/localhost:51516\/Product\/LazyLoadingEnabledProductListResult&#8221; adresi i\u00e7in kar\u015f\u0131m\u0131za \u00e7\u0131kacak olan ekran en az\u0131ndan benim i\u00e7in a\u015fa\u011f\u0131daki gibi olacakt\u0131r eklemi\u015f oldu\u011fum \u00f6rnek verilerden dolay\u0131 (makalenin sonunda projeyi payla\u015f\u0131yor olaca\u011f\u0131m).<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/lazy-loading-enabled.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-501 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/lazy-loading-enabled.jpg\" alt=\"lazy-loading-enabled\" width=\"720\" height=\"716\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/lazy-loading-enabled.jpg 720w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/lazy-loading-enabled-150x150.jpg 150w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/lazy-loading-enabled-300x298.jpg 300w\" data-sizes=\"(max-width: 720px) 100vw, 720px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 720px; --smush-placeholder-aspect-ratio: 720\/716;\" \/><\/a><\/p>\n<p>Bu ekran\u0131n ard\u0131ndan EFProf&#8217;u \u00e7al\u0131\u015ft\u0131ral\u0131m ve bir bakal\u0131m LazyLoading a\u00e7\u0131k iken nas\u0131l bir sonu\u00e7 alaca\u011f\u0131z. EFProf&#8217;u \u00e7al\u0131\u015ft\u0131rabilmek i\u00e7in indirmi\u015f oldu\u011fumuz \u00a0klas\u00f6r\u00fcn i\u00e7erisindeki\u00a0EFProf uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmam\u0131z yeterli olacakt\u0131r.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-2.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-502 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-2.jpg\" alt=\"entity-framework-profiler-2\" width=\"1004\" height=\"734\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-2.jpg 1004w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-2-300x219.jpg 300w\" data-sizes=\"(max-width: 1004px) 100vw, 1004px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1004px; --smush-placeholder-aspect-ratio: 1004\/734;\" \/><\/a><\/p>\n<p>\u0130lk bak\u0131\u015fta bakt\u0131\u011f\u0131m\u0131zda sayfam\u0131z render edildi\u011finde 3 adet SQL sorgusunun olu\u015fturuldu\u011funu ve detay\u0131n\u0131 g\u00f6rebilmekteyiz. Bu i\u015flemleri ger\u00e7ekle\u015ftirebilmek i\u00e7in ise sol &#8220;<strong>Application Statistics<\/strong>&#8221; b\u00f6l\u00fcm\u00fcnden de g\u00f6rebilece\u011fimiz \u00fczere 2 adet Object Context&#8217;in a\u00e7\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rebilmekteyiz. Her sorgunun sonucunda &#8220;<strong>Row count<\/strong>&#8221; k\u0131sm\u0131nda ne kadar sat\u0131r veri geldi\u011fini, &#8220;<strong>Duration<\/strong>&#8221; k\u0131sm\u0131nda ise harcam\u0131\u015f oldu\u011fu s\u00fcreyi g\u00f6rebilirken &#8220;<strong>Alerts<\/strong>&#8221; k\u0131sm\u0131ndan ise Profiler&#8217;\u0131n performans i\u00e7in gerekli g\u00f6rd\u00fc\u011f\u00fc \u00f6nerileri ve uyar\u0131lar\u0131 bize bildirmektedir.<\/p>\n<p>\u015eimdi ikinci SQL sorgusunun detay\u0131na bir bakal\u0131m:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-3.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-503 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-3.jpg\" alt=\"entity-framework-profiler-3\" width=\"1004\" height=\"734\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-3.jpg 1004w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-3-300x219.jpg 300w\" data-sizes=\"(max-width: 1004px) 100vw, 1004px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1004px; --smush-placeholder-aspect-ratio: 1004\/734;\" \/><\/a><\/p>\n<p>&#8220;<strong>Details<\/strong>&#8221; k\u0131sm\u0131ndan g\u00f6rebildi\u011fimiz gibi Lazy Loading a\u00e7\u0131k oldu\u011fu i\u00e7in ve listeleme ekran\u0131ndan \u00fcr\u00fcnleri listelerken, marka bilgisine Brand objesinin Navigation Property&#8217;si \u00fczerinden eri\u015fti\u011fimiz i\u00e7in ikinci bir query execute etmektedir.<\/p>\n<p>EFProf Profiler arac\u0131n\u0131n en be\u011fendi\u011fim \u00f6zelliklerinden\u00a0biriside \u015fimdi ilk SQL sorgumuz olan t\u00fcm listeyi \u00e7ekti\u011fimiz Query&#8217;e d\u00f6nelim ve &#8220;<strong>Statements<\/strong>&#8221; sekmesinin\u00a0en sa\u011f\u0131nda\u00a0bulunan &#8220;<strong>Alerts<\/strong>&#8221; k\u0131sm\u0131nda\u00a0bulunan top&#8217;a t\u0131klayarak\u00a0bizi\u00a0y\u00f6nlendirecek oldu\u011fu ekranda\u00a0performansa y\u00f6nelik olarak\u00a0yapabilece\u011fimiz geli\u015ftirmeleri\u00a0g\u00f6rebilmekteyiz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-4.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-504 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-4.jpg\" alt=\"entity-framework-profiler-4\" width=\"1004\" height=\"734\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-4.jpg 1004w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-4-300x219.jpg 300w\" data-sizes=\"(max-width: 1004px) 100vw, 1004px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1004px; --smush-placeholder-aspect-ratio: 1004\/734;\" \/><\/a><\/p>\n<p><strong>Alert<\/strong> sekmesinde ise Unbounded result set&#8217;in oldu\u011funu bize bir \u00f6neri olarak s\u00f6ylemektedir. Yani veritaban\u0131ndan bir veri seti \u00e7ekerken herhangi bir limitle koymad\u0131\u011f\u0131m\u0131z\u0131 ve performansa y\u00f6nelik bir yava\u015flaman\u0131n olaca\u011f\u0131ndan s\u00f6z etmektedir. \u0130kinci bir g\u00fczel y\u00f6n\u00fc ise &#8220;read more&#8221; a t\u0131klad\u0131\u011f\u0131m\u0131zda EFProf&#8217;un kendi guideline&#8217;\u0131na y\u00f6nlendirerek a\u015fa\u011f\u0131daki kod blo\u011funda oldu\u011fu gibi nas\u0131l yapabilece\u011fimizi kodsal olarak g\u00f6stermektedir. :)<\/p>\n<pre class=\"lang:c# decode:true\">var query = (from post in blogDataContext.Posts            \r\n            where post.Category == \"Performance\"            \r\n            select post)\r\n            .Take(15);<\/pre>\n<p>Ayr\u0131ca &#8220;<strong>Stack Trace<\/strong>&#8221; sekmesinden ise ger\u00e7ekle\u015fen i\u015flemler\u00a0ak\u0131\u015f\u0131n\u0131n hangi s\u0131n\u0131flardan ge\u00e7ti\u011fini ve \u00e7ift t\u0131klad\u0131\u011f\u0131n\u0131z taktirde i\u015fleme dair olan method&#8217;un sat\u0131r\u0131na kadar Visual Studio \u00fczerinde g\u00f6stermektedir.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-8.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-508 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-8.jpg\" alt=\"entity-framework-profiler-8\" width=\"1013\" height=\"736\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-8.jpg 1013w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-8-300x218.jpg 300w\" data-sizes=\"(max-width: 1013px) 100vw, 1013px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1013px; --smush-placeholder-aspect-ratio: 1013\/736;\" \/><\/a><\/p>\n<p>EFProf&#8217;un farkl\u0131 y\u00f6nlerine de bakabilmek ad\u0131na \u015fimdi\u00a0<strong>EagerLoadingEnabledProductListResult<\/strong> action&#8217;unu a\u00e7al\u0131m ve yine Product&#8217;lar\u0131n listelenmesi s\u0131ras\u0131nda olu\u015fan Query&#8217;lere bir bakal\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-5.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-505 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-5.jpg\" alt=\"entity-framework-profiler-5\" width=\"1004\" height=\"734\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-5.jpg 1004w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-5-300x219.jpg 300w\" data-sizes=\"(max-width: 1004px) 100vw, 1004px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1004px; --smush-placeholder-aspect-ratio: 1004\/734;\" \/><\/a><\/p>\n<p>Entity Framework,\u00a0Eager Loading a\u00e7\u0131k oldu\u011fundan dolay\u0131 Brand tablosunu da join yaparak\u00a0tek bir sorguda t\u00fcm veri setini \u00e7ekmektedir. Bu veriler do\u011frultusunda yapm\u0131\u015f oldu\u011fumuz i\u015flemin performans\u0131 i\u00e7in Eager Loading mi yoksa Lazy Loading mi veya Query&#8217;lerde daha farkl\u0131 neleri\u00a0filtreleyebilirimi g\u00f6rebilmekteyiz. Bunun haricinde ise veritaban\u0131 taraf\u0131nda en \u00e7ok hangi tabloda s\u00fcre maliyeti kaybetmekteyiz sorusunu ise<strong> Query Plan<\/strong> \u00fczerinden a\u015fa\u011f\u0131daki gibi g\u00f6rebilmekteyiz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-6.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-506 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-6.jpg\" alt=\"entity-framework-profiler-6\" width=\"948\" height=\"736\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-6.jpg 948w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-6-300x233.jpg 300w\" data-sizes=\"(max-width: 948px) 100vw, 948px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 948px; --smush-placeholder-aspect-ratio: 948\/736;\" \/><\/a><\/p>\n<p>Bunlar\u0131n haricinde ise &#8220;<strong>Analysis<\/strong>&#8221; paneli \u00fczerinden de birden \u00e7ok rapora ula\u015fabilmemiz m\u00fcmk\u00fcnd\u00fcr. &#8220;<strong>Overall Usage<\/strong>&#8221;\u00a0sekmesinden ise sayfan\u0131n render olma s\u00fcrecine kadar ger\u00e7ekle\u015fen genel istatistikleri a\u015fa\u011f\u0131daki gibi g\u00f6rebilmekteyiz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-7.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-507 lazyload\" data-src=\"\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-7.jpg\" alt=\"entity-framework-profiler-7\" width=\"1013\" height=\"736\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-7.jpg 1013w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2015\/12\/entity-framework-profiler-7-300x218.jpg 300w\" data-sizes=\"(max-width: 1013px) 100vw, 1013px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1013px; --smush-placeholder-aspect-ratio: 1013\/736;\" \/><\/a><\/p>\n<p>Ayr\u0131ca bu ekran \u00fczerinden yine bize maliyetli olan SQL sorgular\u0131n\u0131 &#8220;<strong>Expensive Queries<\/strong>&#8221; sekmesinden g\u00f6rebilmekteyiz. Ben basic bir veri seti \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m i\u00e7in fazla bir rapor olu\u015fmam\u0131\u015f durumdad\u0131r. Sizler ise Entity Framework kulland\u0131\u011f\u0131n\u0131z projelerinizde bu Profiler arac\u0131 ile performansa dair neleri refactor etmeniz gerekti\u011fini\u00a0veya veritaban\u0131nda g\u00f6z atman\u0131z gereken index bilgileri gibi detaylara rahatl\u0131kla eri\u015febiliyor olacaks\u0131n\u0131z.<\/p>\n<p>Umuyorum ki bu profiler arac\u0131 sizlerinde \u00e7ok i\u015fine yarayacakt\u0131r.<\/p>\n<p>\u0130lgili \u00f6rnek proje dosyas\u0131 ektedir:<\/p>\n<p><a href=\"\/wp-content\/uploads\/2015\/12\/EFProfilerTest.rar\">EFProfilerTest<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar. Bu makalemde sizlere Entity Framework kullan\u0131larak\u00a0geli\u015ftirilmi\u015f olan\u00a0projelerde,\u00a0performans \u00f6l\u00e7\u00fcmleri ve refactoring&#8217;ler\u00a0yapabilmek ad\u0131na\u00a0Entity Framework i\u00e7in geli\u015ftirilmi\u015f olan bir Profiler arac\u0131n\u0131 tan\u0131taca\u011f\u0131m. Bu Profiler arac\u0131 her ne kadar \u00fccretli olsa da, 30 g\u00fcnl\u00fck bir trial s\u00fcr\u00fcm\u00fc i\u015fimizi g\u00f6rmektedir. Makalenin ilerleyen k\u0131s\u0131mlar\u0131nda neden free bir Profiler arac\u0131&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/entity-framework-icin-profiler\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Entity Framework i\u00e7in Profiler<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56,175],"tags":[145,146,147],"class_list":["post-498","post","type-post","status-publish","format-standard","hentry","category-orm","category-performans-profiling","tag-entity-framework","tag-entity-framework-profiler","tag-entity-framework-query-plan","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Entity Framework i\u00e7in Profiler - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Entity Framework i\u00e7in Profiler - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-03T22:10:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-10-27T07:36:15+00:00\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Entity Framework i\u00e7in Profiler\",\"datePublished\":\"2015-12-03T22:10:18+00:00\",\"dateModified\":\"2016-10-27T07:36:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/\"},\"wordCount\":1356,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"keywords\":[\"Entity Framework\",\"Entity Framework Profiler\",\"Entity Framework Query Plan\"],\"articleSection\":[\"ORM\",\"Performans (Profiling)\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/\",\"name\":\"Entity Framework i\u00e7in Profiler - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"datePublished\":\"2015-12-03T22:10:18+00:00\",\"dateModified\":\"2016-10-27T07:36:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/entity-framework-icin-profiler\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Entity Framework i\u00e7in Profiler\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Entity Framework i\u00e7in Profiler - G\u00f6khan G\u00f6kalp","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/","og_locale":"tr_TR","og_type":"article","og_title":"Entity Framework i\u00e7in Profiler - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2015-12-03T22:10:18+00:00","article_modified_time":"2016-10-27T07:36:15+00:00","author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Entity Framework i\u00e7in Profiler","datePublished":"2015-12-03T22:10:18+00:00","dateModified":"2016-10-27T07:36:15+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/"},"wordCount":1356,"commentCount":1,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"keywords":["Entity Framework","Entity Framework Profiler","Entity Framework Query Plan"],"articleSection":["ORM","Performans (Profiling)"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/","url":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/","name":"Entity Framework i\u00e7in Profiler - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"datePublished":"2015-12-03T22:10:18+00:00","dateModified":"2016-10-27T07:36:15+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/entity-framework-icin-profiler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Entity Framework i\u00e7in Profiler"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=498"}],"version-history":[{"count":4,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/498\/revisions"}],"predecessor-version":[{"id":518,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/498\/revisions\/518"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}