﻿
{"id":10579,"date":"2019-03-19T15:31:17","date_gmt":"2019-03-19T15:31:17","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=10579"},"modified":"2019-03-19T15:32:53","modified_gmt":"2019-03-19T15:32:53","slug":"entity-framework-asnotracking-ile-takip-sonlandirma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-asnotracking-ile-takip-sonlandirma\/","title":{"rendered":"Entity Framework &#8211; AsNoTracking \u0130le Takip Sonland\u0131rma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Yaz\u0131l\u0131m uygulamalar\u0131nda, par\u00e7a odakl\u0131 yap\u0131lan performans aktiviteleri makro d\u00fczeye bir b\u00fct\u00fcn olarak yans\u0131makta haliyle genel olarak ilgili uygulama olabildi\u011fince performansl\u0131 i\u015flevsellik g\u00f6sterebilmektedir. Dolay\u0131s\u0131yla her bir par\u00e7ada; kod kalitesine dikkat edilmi\u015f ve bellek y\u00f6netimine \u00f6zen g\u00f6sterilmi\u015fse e\u011fer ve t\u00fcm bunlar\u0131n yan\u0131nda da ekstradan l\u00fczumsuz kodlardan(Dummy Code) ar\u0131nd\u0131r\u0131lm\u0131\u015f ise bu durum mikro d\u00fczeyde optimizasyon \u015feklinde de\u011ferlendirilebilmektedir.<\/p>\n<p>\u0130\u015fte bu optimizasyon s\u00fcre\u00e7lerinden veritaban\u0131 \u00e7al\u0131\u015fmalar\u0131nda kulland\u0131\u011f\u0131m\u0131z ORM(Object Relational Mapping) yakla\u015f\u0131m\u0131 olan Entity Framework \u00fczerinde de dikkat etmemiz gereken bir noktaya temas edecek, yap\u0131lan aktiviteleri performans ve maliyet a\u00e7\u0131s\u0131ndan nas\u0131l minimize edebilece\u011fimizi inceleyece\u011fiz&#8230;<\/p>\n<h3>AsNoTracking Nedir? Ne \u0130\u015f Yapar?<\/h3>\n<p>Entity Framework, bir sorgu neticesinde d\u00f6nd\u00fcr\u00fclen t\u00fcm nesneleri izlemeye almakta ve bu nesneler \u00fczerindeki t\u00fcm de\u011fi\u015fiklikleri bu \u015fekilde takip edebilmektedir. \u0130\u015fte bu takip sayesinde ilgili nesneler \u00fczerinde yap\u0131lan t\u00fcm de\u011fi\u015fiklikleri &#8220;SaveChanges&#8221; metodu sayesinde veritaban\u0131na yans\u0131tabilmektedir. Bu durum biz yaz\u0131l\u0131m geli\u015ftiriciler i\u00e7in gayet pratik bir kullan\u0131m getirmekte ve ekstradan s\u00fcre\u00e7te performansl\u0131 \u00e7al\u0131\u015fmam\u0131z\u0131 sa\u011flamaktad\u0131r. Evet&#8230; Bizler performansl\u0131 \u00e7al\u0131\u015f\u0131r\u0131z \u00e7al\u0131\u015fmas\u0131na lakin uygulamam\u0131z bu takip mekanizmas\u0131ndan dolay\u0131 ters tepki g\u00f6stermekte ve performans\u0131 yak\u0131t olarak kullanmakta hele hele b\u00fcy\u00fck boyutlu verilerde ise maliyet olduk\u00e7a a\u011f\u0131r olmaktad\u0131r. <\/p>\n<p>Hatta bilirsiniz, piyasada Entity Framework  hakk\u0131nda &#8220;<em>yok \u015f\u00f6yle yava\u015f, yok b\u00f6yle hantal<\/em>&#8221; vs. s\u00f6ylentileri dola\u015fmaktad\u0131r. \u0130\u015fte bu s\u00f6ylentilerin temel sebebi Entity Framework yap\u0131lanmas\u0131n\u0131n bu takip mekanizmas\u0131 gibi baz\u0131 \u015feylerinin tam olarak bilinmemesinden dolay\u0131 yanl\u0131\u015f kullan\u0131m\u0131ndan kaynaklanmaktad\u0131r.<\/p>\n<p><strong>Peki ne yapacak? neye dikkat edece\u011fiz?<\/strong><br \/>\nBu sorunun cevab\u0131n\u0131 verebilmek i\u00e7in yukar\u0131da bahsetti\u011fim takip mekanizmas\u0131 hakk\u0131nda s\u00f6yle\u015fimize devam etmeliyiz&#8230; Entity Framework, sorgu neticesinde getirdi\u011fi nesneleri otomatik takibe almaktad\u0131r. E\u011fer ki biz yaz\u0131l\u0131m geli\u015ftiriciler, bu nesneler \u00fczerinde g\u00fcncelleme yahut yeni veri ekleme vs. gibi i\u015flemler ger\u00e7ekle\u015ftireceksek bu takip mekanizmas\u0131na dokunmaks\u0131z\u0131n \u00e7al\u0131\u015fmalar\u0131m\u0131za devam etmeliyiz. Yok e\u011fer elde etti\u011fimiz verileri sade ve sadece elde etmekle yetinecek ve bu veriler \u00fczerinde herhangi bir g\u00fcncelleme, ekleme yahut silme i\u015flemi ger\u00e7ekle\u015ftirmeyeceksek bu takip mekanizmas\u0131n\u0131 <u><strong><em>k\u0131rmal\u0131y\u0131z!<\/em><\/strong><\/u><\/p>\n<p>Neden mi?<\/p>\n<p>Yersiz maliyetten ka\u00e7\u0131nmak i\u00e7in&#8230; Nihayetinde \u00fczerinde kesinlikle oynama yapmayaca\u011f\u0131n\u0131z verilerin, \u00fczerinde yap\u0131lan oynamalar\u0131 yakalamak i\u00e7in durmadan ekstra maliyet gerektiren bir mekanizmayla yersiz bir \u015fekilde takip edilmesine hi\u00e7 gerek yoktur. Haliyle ilgili mekanizma l\u00fczumlu l\u00fczumsuz t\u00fcm sorgularda kullan\u0131l\u0131r ve g\u00f6z ard\u0131 edilirse, birilerini de\u011fil Entity Framework hi\u00e7bir ORM tatmin etmeyecektir.<\/p>\n<p><strong><em>AsNoTracking<\/em><\/strong>; Entity Framework taraf\u0131ndan uygulamalar\u0131n performans\u0131n\u0131 optimize etmemize yard\u0131mc\u0131 olmak i\u00e7in geli\u015ftirilmi\u015f bir fonksiyondur. \u0130\u015flevsel olarak veritaban\u0131ndan sorgu neticesinde elde edilen nesnelerin takip mekanizmas\u0131 ilgili fonksiyon taraf\u0131ndan k\u0131r\u0131larak, sistem taraf\u0131ndan izlenmelerine son verilmesini sa\u011flamakta ve b\u00f6ylece t\u00fcm verisel varl\u0131klar\u0131n ekstradan i\u015flenme yahut l\u00fczumsuz depolanma s\u00fcre\u00e7lerine maliyet ayr\u0131lmamaktad\u0131r.<\/p>\n<blockquote><p><strong>AsNoTracking ile \u00f6nemli performans kazan\u0131mlar\u0131 elde edilebilir!<\/strong><\/p><\/blockquote>\n<p>AsNoTracking fonksiyonu ile takibi k\u0131r\u0131lm\u0131\u015f t\u00fcm nesneler do\u011fal olarak g\u00fcncelleme durumlar\u0131nda &#8220;SaveChanges&#8221; fonksiyonundan etkilenmeyecektirler.<\/p>\n<table>\n<thead>\n<tr>\n<th>Tracking<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            VTContext db = serviceProvider.GetService&lt;VTContext&gt;();\r\n            var personels = db.Personels;\r\n            Personel yeniPersonel = new Personel { Adi = &quot;Gen\u00e7ay&quot;, SoyAdi = &quot;Y\u0131ld\u0131z&quot; };\r\n            personels.Add(yeniPersonel);\r\n            Personel silinecekPersonel = db.Personels.FirstOrDefault(p =&gt; p.Id == 7);\r\n            personels.Remove(silinecekPersonel);\r\n            db.SaveChanges();\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\nT\u00fcm nesneler takip edilmekte. Dolay\u0131s\u0131yla yap\u0131lan t\u00fcm aktiviteler veritaban\u0131na direkt olarak fiziksel yans\u0131t\u0131lmaktad\u0131r.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<thead>\n<tr>\n<th>AsNoTracking<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            VTContext db = serviceProvider.GetService&lt;VTContext&gt;();\r\n            var personels = db.Personels.AsNoTracking().ToList();\r\n            Personel yeniPersonel = new Personel { Adi = &quot;Gen\u00e7ay&quot;, SoyAdi = &quot;Y\u0131ld\u0131z&quot; };\r\n            personels.Add(yeniPersonel);\r\n            Personel silinecekPersonel = db.Personels.FirstOrDefault(p =&gt; p.Id == 7);\r\n            personels.Remove(silinecekPersonel);\r\n            db.SaveChanges();\r\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>\nTakip kesilmekte. Dolay\u0131s\u0131yla yap\u0131lan t\u00fcm aktiviteler veritaban\u0131na yans\u0131t\u0131lmayacakt\u0131r.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A\u015fa\u011f\u0131daki \u00f6rnek kod bloklar\u0131nda yapt\u0131\u011f\u0131m\u0131z test ile AsNoTracking&#8217;in performans\u0131n\u0131 \u00f6l\u00e7ebilir ve de\u011ferlendirme yapabiliriz.<\/p>\n<p>AsNoTracking kullan\u0131lmad\u0131\u011f\u0131nda;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma.png\" alt=\"Entity Framework - AsNoTracking \u0130le Takip Sonland\u0131rma\" width=\"530\" height=\"216\" class=\"aligncenter size-full wp-image-10608\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma.png 530w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma-300x122.png 300w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><br \/>\nAsNoTracking kullan\u0131ld\u0131\u011f\u0131nda;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma-1.png\" alt=\"Entity Framework - AsNoTracking \u0130le Takip Sonland\u0131rma\" width=\"509\" height=\"214\" class=\"aligncenter size-full wp-image-10609\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma-1.png 509w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Entity-Framework-AsNoTracking-\u0130le-Takip-Sonland\u0131rma-1-300x126.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere yukar\u0131da yap\u0131lan i\u015flemler ancak milisaniye cinsinden bir s\u00fcreye mal olduklar\u0131ndan dolay\u0131 i\u015flem s\u00fcrelerini milisaniye \u00fczerinden hesaplamam\u0131z gerekti. Velhas\u0131l aradaki farka dikkat etmenizi istiyorum \ud83d\ude42<\/p>\n<p>Art\u0131k Entity Framework ile \u00e7al\u0131\u015f\u0131rken elde edilen t\u00fcm verisel varl\u0131klar\u0131n ekleme, silme ve g\u00fcncelleme durumlar\u0131n\u0131 g\u00f6z \u00f6n\u00fcne alarak takip etmenizi ve gereksiz izlenim durumlar\u0131n\u0131 g\u00f6z ard\u0131 etmeksizin \u00e7al\u0131\u015fmalar\u0131n\u0131za daha da fazla performans katman\u0131z\u0131 \u00f6neriyor, yaz\u0131m\u0131 burada noktal\u0131yorum.<\/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<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Yaz\u0131l\u0131m uygulamalar\u0131nda, par\u00e7a odakl\u0131 yap\u0131lan performans aktiviteleri makro d\u00fczeye bir b\u00fct\u00fcn olarak yans\u0131makta haliyle genel olarak ilgili uygulama olabildi\u011fince performansl\u0131 i\u015flevsellik g\u00f6sterebilmektedir. Dolay\u0131s\u0131yla her bir par\u00e7ada; kod kalitesine dikkat edilmi\u015f ve bellek y\u00f6netimine&#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":3739,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[955],"tags":[2785,2786,963,2787],"class_list":["post-10579","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entity-framework","tag-asnotracking","tag-ef-asnotracking","tag-entity-framework","tag-entity-framework-asnotracking"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10579","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=10579"}],"version-history":[{"count":34,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10579\/revisions"}],"predecessor-version":[{"id":10615,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10579\/revisions\/10615"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3739"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=10579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}