﻿
{"id":19898,"date":"2020-12-14T12:27:00","date_gmt":"2020-12-14T12:27:00","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=19898"},"modified":"2020-12-14T12:27:00","modified_gmt":"2020-12-14T12:27:00","slug":"entity-framework-core-connection-resiliency","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-core-connection-resiliency\/","title":{"rendered":"Entity Framework Core &#8211; Connection Resiliency"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Uygulamalar\u0131m\u0131zda veritaban\u0131 diyaloglar\u0131n\u0131 h\u0131zl\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirebilmek i\u00e7in kulland\u0131\u011f\u0131m\u0131z ORM yap\u0131lanmalar\u0131 bazen istemsiz durumlarla kar\u015f\u0131la\u015fabilmektedirler. Tabi ki de bir yaz\u0131l\u0131m\u0131n \u00e7al\u0131\u015fma s\u00fcresince istemsiz durumlarla kar\u015f\u0131la\u015fmas\u0131 olduk\u00e7a ola\u011fan bir durumdur lakin burada m\u00fchim olan kulland\u0131\u011f\u0131m\u0131z ORM yap\u0131lanmas\u0131n\u0131n bu durumlarla kar\u015f\u0131la\u015f\u0131ld\u0131\u011f\u0131nda nas\u0131l bir aksiyon ald\u0131\u011f\u0131d\u0131r. Bu i\u00e7eri\u011fimizde, ORM yap\u0131lanmalar\u0131ndan Entity Framework Core taraf\u0131ndan generate edilen veritaban\u0131 komutlar\u0131n\u0131n, beklenmedik hatalar ile kar\u015f\u0131la\u015fmas\u0131 durumunda benimsedi\u011fi yenilik\u00e7i bir yakla\u015f\u0131m olan <em>Connection Resiliency<\/em> stratejisini ele al\u0131yor olaca\u011f\u0131z.<\/p>\n<p>Connection Resiliency, EF Core taraf\u0131ndan \u00fcretilen veritaban\u0131 komutlar\u0131n\u0131n ba\u015far\u0131s\u0131z olmas\u0131 durumunda tekrar otomatik olarak denenmesini sa\u011flayan bir stratejidir. EF Core, bu olas\u0131 hatalar durumuna kar\u015f\u0131l\u0131k Retry Pattern&#8217;i baz almakta ve otomatik olarak hata veren i\u015flemi yeni bir transaction ile tekrar devreye sokmaktad\u0131r. B\u00f6ylece bu \u00f6zellik sayesinde hatalar\u0131 tespit edebilmekte m\u00fcmk\u00fcn olmaktad\u0131r.<\/p>\n<p>Connection Resiliency&#8217;i kullanabilmek i\u00e7in yap\u0131lmas\u0131 gereken sadece EF Core konfig\u00fcrasyonlar\u0131nda retry policy&#8217;i aktif etmektir. Bunun i\u00e7in &#8216;OnConfiguring&#8217; metodu kullan\u0131labilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\r\n        {\r\n            optionsBuilder.UseSqlServer(&quot;Server=.;Database=CompanyDB2;Trusted_Connection=True;&quot;,\r\n                options =&gt; options.EnableRetryOnFailure());\r\n            base.OnConfiguring(optionsBuilder);\r\n        }\r\n<\/pre>\n<p>Yahut Asp.NET Core uygulamalar\u0131nda context&#8217;i register etti\u011fimiz &#8216;Startup.cs&#8217; dosyas\u0131 da tercih edilebilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddDbContext&lt;CompanyContext&gt;(x =&gt;\r\n                x.UseSqlServer(&quot;Server=.;Database=CompanyDB2;Trusted_Connection=True;&quot;,\r\n                options =&gt; options.EnableRetryOnFailure()));\r\n        }\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8216;EnableRetryOnFailure&#8217; fonksiyonu ile ba\u015far\u0131s\u0131zl\u0131k durumunda yeniden deneme etkinle\u015ftirilmektedir. \u0130lgili fonksiyonun overload&#8217;lar\u0131na g\u00f6z atarsak e\u011fer;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/12\/Entity-Framework-Core-Connection-Resiliency.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/12\/Entity-Framework-Core-Connection-Resiliency-1024x51.png\" alt=\"Entity Framework Core - Connection Resiliency\" width=\"1024\" height=\"51\" class=\"aligncenter size-large wp-image-19908\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/12\/Entity-Framework-Core-Connection-Resiliency-1024x51.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/12\/Entity-Framework-Core-Connection-Resiliency-300x15.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/12\/Entity-Framework-Core-Connection-Resiliency-768x38.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/12\/Entity-Framework-Core-Connection-Resiliency.png 1507w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a>yeniden deneme say\u0131s\u0131n\u0131(maxRetryCount), yeniden denemeler aras\u0131ndaki maksimum gecikme s\u00fcresini(maxRetryDelay) ve sadece ge\u00e7ici oldu\u011fu d\u00fc\u015f\u00fcn\u00fclen SQL hata numaralar\u0131n\u0131(errorNumbersToAdd) ayarlayabildi\u011fimizi g\u00f6rmekteyiz.<\/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, Uygulamalar\u0131m\u0131zda veritaban\u0131 diyaloglar\u0131n\u0131 h\u0131zl\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirebilmek i\u00e7in kulland\u0131\u011f\u0131m\u0131z ORM yap\u0131lanmalar\u0131 bazen istemsiz durumlarla kar\u015f\u0131la\u015fabilmektedirler. Tabi ki de bir yaz\u0131l\u0131m\u0131n \u00e7al\u0131\u015fma s\u00fcresince istemsiz durumlarla kar\u015f\u0131la\u015fmas\u0131 olduk\u00e7a ola\u011fan bir durumdur lakin burada m\u00fchim olan&#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":[2914],"tags":[4004,2850,4005],"class_list":["post-19898","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entity-framework-core","tag-connection-resiliency","tag-entity-framework-core","tag-entity-framework-core-connection-resiliency"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/19898","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=19898"}],"version-history":[{"count":15,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/19898\/revisions"}],"predecessor-version":[{"id":19914,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/19898\/revisions\/19914"}],"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=19898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=19898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=19898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}