﻿
{"id":20750,"date":"2021-02-03T00:49:23","date_gmt":"2021-02-03T00:49:23","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=20750"},"modified":"2021-02-03T01:00:32","modified_gmt":"2021-02-03T01:00:32","slug":"entity-framework-core-ile-in-memoryde-calismak","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-core-ile-in-memoryde-calismak\/","title":{"rendered":"Entity Framework Core \u0130le In-Memory&#8217;de \u00c7al\u0131\u015fmak"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>G\u00fcnl\u00fck hayatta yeni bir teknolojiyi, yap\u0131y\u0131, y\u00f6ntemi vs. \u00f6\u011frenirken veya tatbik ederken yahut geli\u015ftirece\u011finiz herhangi bir \u00fcr\u00fcn\u00fcn promosyonunu olu\u015ftururken yapaca\u011f\u0131n\u0131z \u00e7al\u0131\u015fmada veritaban\u0131na ihtiyac\u0131n\u0131z varsa ve ORM olarak Entity Framework Core&#8217;u kullanacaksan\u0131z, bunun i\u00e7in ger\u00e7ek bir veritaban\u0131 olu\u015fturman\u0131n ve gerekli ba\u011flant\u0131lar\u0131 kurman\u0131n ne kadar maliyetli oldu\u011funu biliyorsunuz kanaatindeyim. \u0130\u015fte bu tarz durumlarda Entity Framework Core, operasyonel a\u00e7\u0131dan birebir ayn\u0131 i\u015flemleri ger\u00e7ekle\u015ftirirken veritaban\u0131 i\u015flemlerinin fiziksel y\u00fck\u00fcn\u00fc ar\u0131nd\u0131rabilmek ve h\u0131zl\u0131ca \u00e7al\u0131\u015fmalar\u0131m\u0131za odaklanabilmek i\u00e7in In-Memory deste\u011fini sunmaktad\u0131r. \u015eimdi gelin bu deste\u011fin nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 inceleyelim.<\/p>\n<p>\u00d6ncelikle Entity Framework Core ile In-Memory&#8217;de \u00e7al\u0131\u015fman\u0131n ne gibi avantajlar\u0131 ve dezavantajlar\u0131 olacakt\u0131r bunlardan bahsedelim;<br \/>\n<strong><em>Avantajlar\u0131<\/em><\/strong><\/p>\n<ul>\n<li>Test ve promosyon uygulamalarda ger\u00e7ek\/fiziksel veritabanlar\u0131 olu\u015fturmak ve yap\u0131land\u0131rmak yerine t\u00fcm veritaban\u0131n\u0131 bellekte modelleyebilir ve gerekli i\u015flemleri sanki ger\u00e7ek bir veritaban\u0131nda \u00e7al\u0131\u015f\u0131yormu\u015f gibi orada ger\u00e7ekle\u015ftirebiliriz.<\/li>\n<li>Bellekte \u00e7al\u0131\u015fmak ge\u00e7ici bir deneyim olaca\u011f\u0131 i\u00e7in veritaban\u0131 serverlar\u0131nda test ama\u00e7l\u0131 \u00fcretilmi\u015f olan veritabanlar\u0131n\u0131n l\u00fczumsuz yer i\u015fgal etmesi engellenmi\u015f olacakt\u0131r.<\/li>\n<li>Bellekte veritaban\u0131n\u0131 modellemek, kodun h\u0131zl\u0131 bir \u015fekilde test edilmesini sa\u011flacakt\u0131r.<\/li>\n<\/ul>\n<p><strong><em>Dezavantajlar\u0131<\/em><\/strong><\/p>\n<ul>\n<li>In-Memory&#8217;de yap\u0131lacak olan veritaban\u0131 i\u015flevlerinde ili\u015fkisel modellemeler yap\u0131lamamaktad\u0131r. Bu durumdan dolay\u0131 veri tutarl\u0131l\u0131\u011f\u0131 sekteye u\u011frayabilir ve istatiksel a\u00e7\u0131dan yanl\u0131\u015f sonu\u00e7lar elde edilebilir.<\/li>\n<\/ul>\n<p>In-Memory&#8217;de tasarlanm\u0131\u015f bir veritaban\u0131 \u00fczerinde yap\u0131lan h\u0131zl\u0131 testler neticesinde art\u0131k uygulaman\u0131n ger\u00e7ek bir veritaban\u0131na ge\u00e7meye haz\u0131r oldu\u011fu anla\u015f\u0131ld\u0131\u011f\u0131 an, gerekli yap\u0131land\u0131rmalar kolayca sa\u011flanabilecek ve direkt fiziksel bir veritaban\u0131na ba\u011flan\u0131labilecektir.<\/p>\n<p><strong><em>K\u00fct\u00fcphane Kurulumu<\/em><\/strong><br \/>\nEntity Framework Core ile in-memory&#8217;de \u00e7al\u0131\u015fabilmek i\u00e7in ilgili projeye <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore\" rel=\"noopener noreferrer\" target=\"_blank\">Microsoft.EntityFrameworkCore<\/a> k\u00fct\u00fcphanesiyle birlikte <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore.InMemory\/\" rel=\"noopener noreferrer\" target=\"_blank\">Microsoft.EntityFrameworkCore.InMemory<\/a> k\u00fct\u00fcphanesinin y\u00fcklenmesi gerekmektedir.<\/p>\n<p><strong><em>\u00d6rnek \u00c7al\u0131\u015fma<\/em><\/strong><br \/>\n\u0130lk olarak \u00f6rnek ama\u00e7l\u0131 birka\u00e7 entity model olu\u015ftural\u0131m.<br \/>\nEmployee;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Employee\r\n    {\r\n        public int Id { get; set; }\r\n        public string Name { get; set; }\r\n        public string Surname { get; set; }\r\n        public List&lt;Customer&gt; Customers { get; set; }\r\n    }\r\n<\/pre>\n<p>Customer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Customer\r\n    {\r\n        public int Id { get; set; }\r\n        public string Name { get; set; }\r\n        public Employee Employee { get; set; }\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan context nesnesini a\u015fa\u011f\u0131daki gibi tasarlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ExampleContext : DbContext\r\n    {\r\n        public DbSet&lt;Employee&gt; Employees { get; set; }\r\n        public DbSet&lt;Customer&gt; Customers { get; set; }\r\n\r\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\r\n        {\r\n            optionsBuilder.UseInMemoryDatabase(&quot;exampleDatabase&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Burada dikkat edilmesi gereken nokta <em><strong>8.<\/strong><\/em> sat\u0131rdaki &#8216;UseInMemoryDatabase&#8217; fonksiyonudur. Bu fonksiyon sayesinde ilgili context&#8217;in in-memory&#8217;de depolama yapaca\u011f\u0131 bilgilendirilmektedir.<\/p>\n<p>B\u00f6ylece test ama\u00e7l\u0131 bellekte veritaban\u0131 sa\u011flam\u0131\u015f bulunmakta ve \u00e7al\u0131\u015fmalar\u0131m\u0131zdaki ekstra yo\u011funlu\u011fu azaltmaktay\u0131z.<\/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, G\u00fcnl\u00fck hayatta yeni bir teknolojiyi, yap\u0131y\u0131, y\u00f6ntemi vs. \u00f6\u011frenirken veya tatbik ederken yahut geli\u015ftirece\u011finiz herhangi bir \u00fcr\u00fcn\u00fcn promosyonunu olu\u015ftururken yapaca\u011f\u0131n\u0131z \u00e7al\u0131\u015fmada veritaban\u0131na ihtiyac\u0131n\u0131z varsa ve ORM olarak Entity Framework Core&#8217;u kullanacaksan\u0131z, bunun i\u00e7in&#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":[2851,4121,963,2850,4119,4120,4123,4122],"class_list":["post-20750","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entity-framework-core","tag-ef-core","tag-ef-core-in-memory","tag-entity-framework","tag-entity-framework-core","tag-entity-framework-core-in-memory","tag-entity-framework-in-memory","tag-microsoft-entityframeworkcore","tag-microsoft-entityframeworkcore-inmemory"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/20750","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=20750"}],"version-history":[{"count":13,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/20750\/revisions"}],"predecessor-version":[{"id":20763,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/20750\/revisions\/20763"}],"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=20750"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=20750"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=20750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}