﻿
{"id":10797,"date":"2019-04-17T17:59:34","date_gmt":"2019-04-17T17:59:34","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=10797"},"modified":"2019-04-17T17:59:34","modified_gmt":"2019-04-17T17:59:34","slug":"asp-net-coreda-automapper-kullanimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-coreda-automapper-kullanimi\/","title":{"rendered":"Asp.NET Core&#8217;da AutoMapper Kullan\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Asp.NET Core uygulamalar\u0131nda, ViewModel nesnelerinin modelledi\u011fi ger\u00e7ekci model entityleri ile e\u015fle\u015ftirilmesini dinamik bir \u015fekilde sa\u011flayan AutoMapper k\u00fct\u00fcphanesinin entegrasyonunu ve kullan\u0131m\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p>Makalemize ilk olarak hi\u00e7 bilmeyenler i\u00e7in Viewmodel nesnesinin ne oldu\u011funu a\u00e7\u0131klayarak ba\u015flayal\u0131m;<\/p>\n<h4>Viewmodel Nedir?<\/h4>\n<p>Viewmodel nesneleri, temelde iki farkl\u0131 senaryoya kar\u015f\u0131 sorumluluk \u00fcstlenen ve biz geli\u015ftiricilerin i\u015fini kolayla\u015ft\u0131ran operasyonel nesnelerdir.<\/p>\n<ul>\n<li><strong>1. Senaryo<\/strong><br \/>\nOOP yap\u0131lanmas\u0131nda bir modelin kullan\u0131c\u0131yla etkile\u015fimi neticesinde kullan\u0131lan\/doldurulan memberlar\u0131n\u0131 temsil eden ve s\u00fcre\u00e7te ilgili model yerine kullan\u0131lan\/ta\u015f\u0131nan\/transfer edilen\/post edilen vs. bir nesnedir.<\/p>\n<p>\u00d6rnek olarak hesap giri\u015fi i\u00e7in kullan\u0131c\u0131 ad\u0131 ve \u015fifre ile yap\u0131lan bir post i\u015fleminde a\u015fa\u011f\u0131daki gibi rol \u00fcstlenmektedir.<br \/>\nGer\u00e7ek model(entity);<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Personel\r\n    {\r\n        public int Id { get; set; }\r\n        public string Adi { get; set; }\r\n        public string Soyadi { get; set; }\r\n        public string KullaniciAdi { get; set; }\r\n        public string Sifre { get; set; }\r\n        virtual public ICollection&lt;Musteri&gt; Musteriler { get; set; }\r\n        virtual public ICollection&lt;Satis&gt; Satislar { get; set; }\r\n    }\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131.png\" alt=\"Asp.NET Core&#039;da AutoMapper Kullan\u0131m\u0131\" width=\"671\" height=\"190\" class=\"aligncenter size-full wp-image-10799\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131.png 671w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-300x85.png 300w\" sizes=\"auto, (max-width: 671px) 100vw, 671px\" \/><\/a><\/p>\n<p>Viewmodel;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class VMPersonel\r\n    {\r\n        public string KullaniciAdi { get; set; }\r\n        public string Sifre { get; set; }\r\n    }\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-1.png\" alt=\"Asp.NET Core&#039;da AutoMapper Kullan\u0131m\u0131\" width=\"739\" height=\"104\" class=\"aligncenter size-full wp-image-10801\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-1.png 739w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-1-300x42.png 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/a><\/p>\n<p>Bu \u015fekilde bir senaryoda post edilen nesneyi direkt olarak ger\u00e7ek model\/entity ile kar\u015f\u0131larsak ilgili propertyler d\u0131\u015f\u0131nda konuyla alakas\u0131z memberlar varsay\u0131lan de\u011ferleriyle gelecektirler. Dolay\u0131s\u0131yla bu \u00e7okta kullan\u0131\u015fl\u0131 bir yap\u0131lanma olmayacakt\u0131r. \u0130\u015fte burada, post neticesinde gelen veriyi direkt de\u011fersel muhattab\u0131 olan ViewModel nesnesi ile kar\u015f\u0131layarak l\u00fczumsuz propertylerden ar\u0131nd\u0131rm\u0131\u015f ve kullan\u0131m a\u00e7\u0131s\u0131ndan da kolayl\u0131k sa\u011flam\u0131\u015f olmaktay\u0131z.\n<\/li>\n<li><strong>2. Senaryo<\/strong><br \/>\nBirden fazla modele ihtiya\u00e7 duyulan durumlarda tek bir nesne \u00fczerinden bu modelleri birle\u015ftirme g\u00f6revi g\u00f6ren nesnedir.<\/p>\n<p>\u00d6rnek olarak a\u015fa\u011f\u0131daki yap\u0131lanmay\u0131 inceleyiniz.<br \/>\nGer\u00e7ek model;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Satis\r\n    {\r\n        public int Id { get; set; }\r\n        public int PersonelId { get; set; }\r\n        public string SatisNo { get; set; }\r\n        virtual public Personel Personel { get; set; }\r\n    }\r\n<\/pre>\n<p>Ger\u00e7ek model;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Musteri\r\n    {\r\n        public int Id { get; set; }\r\n        public int PersonelId { get; set; }\r\n        public string Adi { get; set; }\r\n        public string Sirketi { get; set; }\r\n        virtual public Personel Personel { get; set; }\r\n    }\r\n<\/pre>\n<p>Viewmodel;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class VMSatis_Musteri\r\n    {\r\n        public Satis Satis { get; set; }\r\n        public Musteri Musteri { get; set; }\r\n    }\r\n<\/pre>\n<p>View;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@using AutoMapperProjectExample.Models.ViewModels\r\n@model VMSatis_Musteri\r\n\r\n@using (Html.BeginForm(&quot;Create&quot;, &quot;Home&quot;, FormMethod.Post))\r\n{\r\n    @Html.TextBoxFor(p =&gt; p.Satis.SatisNo)&lt;br \/&gt;\r\n    @Html.TextBoxFor(p =&gt; p.Musteri.Sirketi)&lt;br \/&gt;\r\n    &lt;button&gt;G\u00f6nder&lt;\/button&gt;\r\n}\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-2.png\" alt=\"Asp.NET Core&#039;da AutoMapper Kullan\u0131m\u0131\" width=\"757\" height=\"282\" class=\"aligncenter size-full wp-image-10804\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-2.png 757w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-2-300x112.png 300w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/a><\/p>\n<p>Yukar\u0131daki \u00f6rnekten de g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8220;Satis&#8221; ve &#8220;Musteri&#8221; nesnelerini &#8220;VMSatis_Musteri&#8221; isimli ViewModel ile tek bir nesnede birle\u015ftirmi\u015f ve bu \u015fekilde organize etmi\u015f bulunmaktay\u0131z.\n<\/ul>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere ViewModel nesneleri, bu \u015fekilde iki farkl\u0131 senaryoya g\u00f6re sorumluluk \u00fcstlenen model destek\u00e7isi nesnelerimizdir.<\/p>\n<p>Ayriyetten ViewModel nesneleri;<\/p>\n<ul>\n<li>View sayfalar\u0131nda verileri tutmak i\u00e7in,<\/li>\n<li>Data Annotations ile Validations kurallar\u0131n\u0131 belirlemek i\u00e7in,<\/li>\n<li>Static verileri\/de\u011ferleri tutan ihtiyaca d\u00f6n\u00fck nesneleri kullanabilmek i\u00e7in<\/li>\n<\/ul>\n<p>vs. ama\u00e7l\u0131da kullan\u0131l\u0131r.<\/p>\n<h4>AutoMapper K\u00fct\u00fcphanesi Ne \u0130\u015fe Yarar?<\/h4>\n<p>ViewModel nesnesinin 1. senaryodaki sorumlulu\u011funa kar\u015f\u0131 ger\u00e7ek model ile viewmodel aras\u0131ndaki e\u015fle\u015fmeleri otomatik bir \u015fekilde sa\u011flayabilmek i\u00e7in kullan\u0131lan bir k\u00fct\u00fcphanedir.<\/p>\n<p>\u015e\u00f6yle ki, bir personelin sadece ad ve soyad bilgilerinden bir kay\u0131t olu\u015fturacaksak e\u011fer ilgili verilerle e\u015fle\u015fecek bir viewmodel tasarlayarak post neticesinde gelen datay\u0131 bu viewmodel ile kar\u015f\u0131layabiliriz. Lakin context \u00fczerinden ger\u00e7ek entity ile temas kurulabilece\u011finden dolay\u0131 viewmodelde ki verileri ger\u00e7ek modele yani entitye aktarmam\u0131z gerekmektedir. \u0130\u015fte bu i\u015flemi AutoMapper bizler yerine otomatik bir \u015fekilde ger\u00e7ekle\u015ftirmektedir.<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-3.png\" alt=\"Asp.NET Core&#039;da AutoMapper Kullan\u0131m\u0131\" width=\"670\" height=\"319\" class=\"aligncenter size-full wp-image-10810\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-3.png 670w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-3-300x143.png 300w\" sizes=\"auto, (max-width: 670px) 100vw, 670px\" \/><\/a><\/p>\n<p>Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde viewmodel&#8217;de ki verileri manuel bir \u015fekilde entitye aktarm\u0131\u015f bulunmaktay\u0131z. G\u00fcn\u00fcn sonunda bu i\u015flemi otomatik bir \u015fekilde yapacak olan AutoMapper nesnesine b\u0131rakaca\u011f\u0131z.<\/p>\n<h4>AutoMapper Entegrasyonu<\/h4>\n<p>AutoMapper k\u00fct\u00fcphanesini a\u015fa\u011f\u0131daki kod arac\u0131l\u0131\u011f\u0131yla projeye entegre edebilirsiniz;<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nInstall-Package AutoMapper.Extensions.Microsoft.DependencyInjection\r\n<\/pre>\n<h4>Kurulumu<\/h4>\n<p>K\u00fct\u00fcphane entegrasyonundan sonra uygulamaya &#8220;Startup.cs&#8221; dosyas\u0131ndaki &#8220;ConfigureServices&#8221; metodu i\u00e7erisinden AutoMapper k\u00fct\u00fcphanesini servis olarak ekliyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddAutoMapper();\r\n        }\r\n<\/pre>\n<h4>Kullan\u0131m\u0131<\/h4>\n<p>AutoMapper k\u00fct\u00fcphanesini kullanabilmek i\u00e7in ger\u00e7ek modeller(entity) ile olu\u015fturulan viewmodeller aras\u0131ndaki ili\u015fki belirtilmelidir. Yani, hangi model hani viewmodelle e\u015fle\u015fecektir&#8230;<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-4.png\" alt=\"Asp.NET Core&#039;da AutoMapper Kullan\u0131m\u0131\" width=\"525\" height=\"262\" class=\"aligncenter size-full wp-image-10819\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-4.png 525w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-4-300x150.png 300w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<p>E\u015fle\u015fme i\u00e7in AutoMapper k\u00fct\u00fcphanesinin &#8220;Profile&#8221; s\u0131n\u0131f\u0131 kullan\u0131lmaktad\u0131r. T\u00fcm e\u015fle\u015fme profillerini bu s\u0131n\u0131f arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirmekte ve uygulamaya bildirmekteyiz.<br \/>\n\u00d6rnek i\u00e7in a\u015fa\u011f\u0131daki model ve viewmodelleri olu\u015ftural\u0131m.<br \/>\nGer\u00e7ek modeller;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Musteri\r\n    {\r\n        public int Id { get; set; }\r\n        public int PersonelId { get; set; }\r\n        public string Adi { get; set; }\r\n        public string Sirketi { get; set; }\r\n        virtual public Personel Personel { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Personel\r\n    {\r\n        public int Id { get; set; }\r\n        public string Adi { get; set; }\r\n        public string Soyadi { get; set; }\r\n        public string KullaniciAdi { get; set; }\r\n        public string Sifre { get; set; }\r\n        virtual public ICollection&lt;Musteri&gt; Musteriler { get; set; }\r\n        virtual public ICollection&lt;Satis&gt; Satislar { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Satis\r\n    {\r\n        public int Id { get; set; }\r\n        public int PersonelId { get; set; }\r\n        public string SatisNo { get; set; }\r\n        virtual public Personel Personel { get; set; }\r\n    }\r\n<\/pre>\n<p>ViewModeller;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class VMMusteri\r\n    {\r\n        public string Adi { get; set; }\r\n        public string Sirketi { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class VMPersonel\r\n    {\r\n        public string Adi { get; set; }\r\n        public string Soyadi { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class VMSatis\r\n    {\r\n        public string SatisNo { get; set; }\r\n    }\r\n<\/pre>\n<p>&#8220;Profile&#8221; s\u0131n\u0131f\u0131m\u0131z;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MappingProfile : Profile\r\n    {\r\n        public MappingProfile()\r\n        {\r\n            CreateMap&lt;Personel, VMPersonel&gt;();\r\n            CreateMap&lt;VMPersonel, Personel&gt;();\r\n            CreateMap&lt;Musteri, VMMusteri&gt;();\r\n            CreateMap&lt;VMMusteri, Musteri&gt;();\r\n            CreateMap&lt;Satis, VMSatis&gt;();\r\n            CreateMap&lt;VMSatis, Satis&gt;();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funa dikkat ederseniz e\u011fer &#8220;Profile&#8221; abstract s\u0131n\u0131f\u0131ndan t\u00fcretti\u011fimiz &#8220;MappingProfile&#8221; isimli s\u0131n\u0131f\u0131m\u0131z bizim i\u00e7in e\u015fle\u015ftirme profillerini bar\u0131nd\u0131racak sorumlulu\u011fu \u00fcstlenmektedir. \u0130\u015flemleri kolayl\u0131k olmas\u0131 a\u00e7\u0131s\u0131ndan ilgili s\u0131n\u0131f\u0131n constructer\u0131nda ger\u00e7ekle\u015ftirmeyiz. &#8220;Profile&#8221; s\u0131n\u0131f\u0131ndan gelen &#8220;CreateMap&#8221; metodu arac\u0131l\u0131\u011f\u0131yla e\u015fle\u015ftirmeler yap\u0131lmaktad\u0131r. Burada \u00f6zellikle dikkatinizi \u00e7ekmek istedi\u011fim husus, her e\u015fle\u015ftirmenin birde simetri\u011fini sa\u011flayarak tersine bir \u00e7evriminde s\u00f6z konusu olaca\u011f\u0131 durumlar\u0131da hesaba katmaktay\u0131z.<\/p>\n<p>Kullan\u0131m;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-5.png\" alt=\"Asp.NET Core&#039;da AutoMapper Kullan\u0131m\u0131\" width=\"767\" height=\"267\" class=\"aligncenter size-full wp-image-10831\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-5.png 767w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/04\/Asp.NET-Coreda-AutoMapper-Kullan\u0131m\u0131-5-300x104.png 300w\" sizes=\"auto, (max-width: 767px) 100vw, 767px\" \/><\/a><br \/>\nYukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc incelerseniz e\u011fer AutoMapper, Assembly&#8217;de ki &#8220;Profile&#8221; nesnesini bulmakta ve e\u015fle\u015ftirmeler neticesinde arka planda reflection ile memberlar\u0131 check ederek aralar\u0131nda verilsel transferi sa\u011flamaktad\u0131r. Dolay\u0131s\u0131yla bizleri ekstradan bir maliyetten kurtarmakta ve h\u0131z\u0131m\u0131za h\u0131z katmaktad\u0131r. &#8220;VMPersonel&#8221; olarak gelen nesneyi AutoMapper k\u00fct\u00fcphanesinin nimetlerinden olan &#8220;IMapper&#8221; s\u0131n\u0131f\u0131n\u0131 kullanarak &#8220;Personel&#8221; s\u0131n\u0131f\u0131na Map(e\u015fle\u015ftirme) etmekteyiz. Bu durum di\u011fer modeller ve viewmodeller i\u00e7inde ge\u00e7erlili\u011fini koruyacakt\u0131r. Art\u0131k gerisini sizlerin deneyine b\u0131rak\u0131yorum&#8230;<\/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, Bu i\u00e7eri\u011fimizde Asp.NET Core uygulamalar\u0131nda, ViewModel nesnelerinin modelledi\u011fi ger\u00e7ekci model entityleri ile e\u015fle\u015ftirilmesini dinamik bir \u015fekilde sa\u011flayan AutoMapper k\u00fct\u00fcphanesinin entegrasyonunu ve kullan\u0131m\u0131n\u0131 inceleyece\u011fiz. Makalemize ilk olarak hi\u00e7 bilmeyenler i\u00e7in Viewmodel nesnesinin ne oldu\u011funu&#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":10819,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739,2668,2656,2811],"tags":[2825,2828,2826,2827,2830,2824,2829,807,2831],"class_list":["post-10797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","category-asp-net-core-2","category-asp-net-core-2-mvc","category-asp-net-core-2-1","tag-net-core-viewmodel","tag-asp-net-core-automapper","tag-asp-net-core-viewmodel","tag-automapper","tag-automapper-profile","tag-data-annotations","tag-imapper","tag-viewmodel","tag-viewmodel-nedir"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10797","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=10797"}],"version-history":[{"count":32,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10797\/revisions"}],"predecessor-version":[{"id":10835,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10797\/revisions\/10835"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/10819"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=10797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}