﻿
{"id":3712,"date":"2016-03-22T02:21:55","date_gmt":"2016-03-22T02:21:55","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=3712"},"modified":"2016-03-22T02:21:55","modified_gmt":"2016-03-22T02:21:55","slug":"entity-framework-ile-code-first-yaklasimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/","title":{"rendered":"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Linq To SQL gibi Entity Framework mimariside biz yaz\u0131l\u0131mc\u0131lara olduk\u00e7a h\u0131z kazand\u0131rmakta ve veritaban\u0131 i\u015flemlerinde at\u0131lan bir \u00e7a\u011f\u0131n basamaklar\u0131n\u0131 te\u015fkil etmektedir. Haliyle biz yaz\u0131l\u0131mc\u0131lar ister istemez bu mimarilere y\u00f6nelmekte ve meraklar\u0131m\u0131z\u0131n yan\u0131nda \u00e7al\u0131\u015fmalar\u0131m\u0131z\u0131 da bu mimarilerle s\u00fcrd\u00fckmekteyiz. Tabi g\u00fcn\u00fcm\u00fczde bir yap\u0131 yahut mimariye y\u00f6nelirken kendimize uygun prensip ve yakla\u015f\u0131m se\u00e7memiz ya\u015fayaca\u011f\u0131m\u0131z kar\u0131\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131racakt\u0131r. Burada demek istedi\u011fim o ki, g\u00fcn\u00fcm\u00fczde her mekanizmas\u0131n\u0131n birden fazla yakla\u015f\u0131m\u0131 ve prensibi mevcut oldu\u011fundan, \u00f6\u011frenme s\u00fcrecinde ka\u00e7\u0131n\u0131lmaz olarak kaynaklar\u0131n farkl\u0131l\u0131klar\u0131 kafan\u0131z\u0131 kar\u0131\u015ft\u0131racakt\u0131r. \u0130\u015fte bunun sebebi, her kayna\u011f\u0131n farkl\u0131 bir yakla\u015f\u0131m\u0131 merkez edinmesindendir.<\/p>\n<p>Entity Framework mimarisinde temelde \u00fc\u00e7 adet yakla\u015f\u0131m mevcuttur.<\/p>\n<ul>\n<li>Code First<\/li>\n<li>Database First<\/li>\n<li>Model First<\/li>\n<\/ul>\n<p>Bu yaz\u0131m\u0131zda Code First yakla\u015f\u0131m\u0131 \u00fczerine duraca\u011f\u0131z. Zamanla di\u011fer yakla\u015f\u0131mlar \u00fczerinde de isti\u015faremizi ederiz diye umuyorum.<\/p>\n<h2>Code First Nedir?<\/h2>\n<p>Veritaban\u0131 ile Programlama dili aras\u0131nda ba\u011f kuran bir tekniktir. Projenizde veritaban\u0131 i\u015flemlerinizi m\u00fcmk\u00fcn mertebe Visual Studio taraf\u0131nda kod yazarak ger\u00e7ekle\u015ftirmenizi sa\u011flayan bir yakla\u015f\u0131md\u0131r. Bu yakla\u015f\u0131m sayesinde veritaban\u0131 aray\u00fcz\u00fc ile yaz\u0131l\u0131mc\u0131 aras\u0131nda ili\u015fki minimize edilmektedir.<\/p>\n<p>Code First yap\u0131s\u0131nda programlama dilindeki &#8220;class&#8221; yap\u0131lar\u0131 veritaban\u0131ndaki &#8220;tablo&#8221; yap\u0131lar\u0131na, &#8220;property&#8221; yap\u0131lar\u0131 ise veritaban\u0131ndaki &#8220;kolon&#8221; yap\u0131lar\u0131na denk gelmektedir.<\/p>\n<p>Ayr\u0131ca Attribute&#8217;lar sayesinde veritaban\u0131 yap\u0131lar\u0131na Validationlar uygulanabilmekte ve kolonlara belirli \u015fartlar veyahut k\u0131s\u0131tlamalar koyulabilmektedir.<\/p>\n<p>En \u00f6nemlisi ise projenizdeki modelin oto kontrol\u00fcn\u00fc elinizde hissetmenize ve tam hakimiyetle istedi\u011finiz gibi kullanman\u0131za olanak tan\u0131yor. Database First yakla\u015f\u0131m\u0131 Linq To SQL yap\u0131s\u0131ndaki gibi s\u00fcr\u00fckle b\u0131rak mant\u0131\u011f\u0131yla \u00e7al\u0131\u015fmakta ve her\u015feyi otomatik halletmektedir. Eee bir yaz\u0131l\u0131mc\u0131n\u0131n en b\u00fcy\u00fck arzusu; tez i\u015fte tam hakimiyet&#8230; \u0130\u015fte Code First b\u00f6yle bir \u00e7izgiye sahiptir.<\/p>\n<h2>Projeye Entegrasyonu ve Code First Yap\u0131s\u0131n\u0131n \u0130n\u015fas\u0131<\/h2>\n<p>\u00d6ncelikle yapmam\u0131z gereken, \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projeye Entity Framework Nuget paketini eklemektir.<\/p>\n<p>&#8220;Tools&#8221; -&gt; &#8220;Nuget Package Manager&#8221; -&gt; &#8220;Manage Nuget Packages for Solution&#8230;&#8221; kombinasyonunu takip edin.<\/p>\n<div id=\"attachment_3719\" style=\"width: 707px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi\/\" rel=\"attachment wp-att-3719\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3719\" class=\"size-full wp-image-3719\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"697\" height=\"393\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131.png 697w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-300x169.png 300w\" sizes=\"auto, (max-width: 697px) 100vw, 697px\" \/><\/a><p id=\"caption-attachment-3719\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div>\n<p>A\u00e7\u0131lan pencerede a\u015fa\u011f\u0131daki gibi &#8220;entity&#8221; anahtar kelimesini arat\u0131n. Listede kar\u015f\u0131n\u0131za \u00e7\u0131kan &#8220;EntityFramework&#8221; paketini Install ediniz.<\/p>\n<div id=\"attachment_3720\" style=\"width: 1110px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi-2\/\" rel=\"attachment wp-att-3720\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3720\" class=\"size-full wp-image-3720\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-1.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"1100\" height=\"321\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-1.png 1100w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-1-300x88.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-1-768x224.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-1-1024x299.png 1024w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/a><p id=\"caption-attachment-3720\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div>\n<p>Y\u00fcklemeyi ger\u00e7ekle\u015ftirdikten sonra gerekli Entity Framework referanslar\u0131 projeye entegre edilmi\u015f bulunmaktad\u0131r.<\/p>\n<p>\u015eimdi s\u0131ra geldi Code First yap\u0131s\u0131yla bir model olu\u015fturmaya. Haliyle olu\u015fturma a\u015famas\u0131nda in\u015fa s\u00fcrecinide g\u00f6rm\u00fc\u015f olaca\u011f\u0131z.<\/p>\n<p>Hat\u0131rlarsan\u0131z e\u011fer Code First yap\u0131s\u0131 veritaban\u0131 i\u015flemlerini programatik olarak ger\u00e7ekle\u015ftirmemize yarayan bir yakla\u015f\u0131m sergilemekteydi. O halde \u00f6rnek olarak \u00e7al\u0131\u015faca\u011f\u0131m\u0131z projede hem veritaban\u0131 olu\u015fturaca\u011f\u0131z, hem de Code First yap\u0131s\u0131n\u0131n di\u011fer nimetlerinden faydalanaca\u011f\u0131z.<\/p>\n<p>Gelin t\u00fcm teferruat\u0131nca \u015fu konuyu ele alal\u0131m&#8230;<\/p>\n<div id=\"attachment_3721\" style=\"width: 178px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi-3\/\" rel=\"attachment wp-att-3721\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3721\" class=\"size-full wp-image-3721\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-2.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"168\" height=\"178\" \/><\/a><p id=\"caption-attachment-3721\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div>\n<p>Code First ile t\u00fcm modele hakimiyet sa\u011flaman\u0131n ekstra getirisi kodlara disiplinli bir hiyerar\u015fik d\u00fczen sa\u011flaman\u0131n sorumlulu\u011fu getirmesidir. Haliyle modele tam hakimeyet demek, a&#8217;dan z&#8217;ye biz kodlayaca\u011f\u0131z demek. O y\u00fczden entitylerimi(yani tablolar\u0131) &#8220;Entity&#8221; klas\u00f6r\u00fcne, yaz\u0131l\u0131m ile server aras\u0131nda ileti\u015fimi sa\u011flayacak olan Context s\u0131n\u0131f\u0131n\u0131\u00a0da &#8220;Context&#8221; klas\u00f6r\u00fcne olu\u015fturaca\u011f\u0131m.<\/p>\n<p>\u015eimdi Code First ile bir veritaban\u0131 olu\u015fturmay\u0131 ve bu veritaban\u0131 i\u00e7erisine bir tablo eklemeyi g\u00f6relim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OrnekTablo\r\n    {\r\n        public int ID { get; set; }\r\n        public string Kolon1 { get; set; }\r\n        public string Kolon2 { get; set; }\r\n    }\r\n<\/pre>\n<p>\u00d6ncelikle tablomuzu temsil eden s\u0131n\u0131f\u0131m\u0131 olu\u015fturdum. \u015eimdi veritaban\u0131 ile ba\u011flant\u0131 kuraca\u011f\u0131m\u0131z Context s\u0131n\u0131f\u0131n\u0131 olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OrnekVeriDbContext : DbContext\r\n    {\r\n        public DbSet&lt;OrnekTablo&gt; OrnekTablos { get; set; }\r\n    }\r\n<\/pre>\n<p>Context s\u0131n\u0131f\u0131m\u0131z\u0131 incelerseniz e\u011fer DbContext s\u0131n\u0131f\u0131ndan t\u00fcremektedir. Bunun sebebi, Entity Framework mimarisinin nimetlerine bu s\u0131n\u0131f\u0131n miras\u0131ndan eri\u015febilecek, ayriyetten ilgili s\u0131n\u0131f\u0131m\u0131z\u0131n bir Context s\u0131n\u0131f\u0131 olmas\u0131n\u0131 sa\u011flayacakt\u0131r. &#8220;OrnekVeriDbContext&#8221; s\u0131n\u0131f\u0131na verdi\u011fimiz isim bizim i\u00e7in olduk\u00e7a \u00f6nemlidir.<\/p>\n<p>Code First yap\u0131s\u0131nda en temel nokta, veritaban\u0131ndaki tablolalar\u0131 temsil edecek Generic yap\u0131daki DbSet tipinden propertyler olarak tutmas\u0131d\u0131r. Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz &#8220;OrnekTablos&#8221; isimli property, bizim &#8220;OrnekTablo&#8221; isimli tablomuzun, veritaban\u0131ndaki fiziksel yans\u0131mas\u0131n\u0131 olu\u015fturacakt\u0131r.<\/p>\n<p>\u0130\u015fte en temelde de olsa Code First yap\u0131s\u0131nda bir veritaban\u0131 dizayn ettik ve s\u0131ra bu veritaban\u0131n\u0131 olu\u015fturmaya geldi. Peki&#8230; Olu\u015fturdu\u011fumuz bu yap\u0131, hangi Server&#8217;da hangi isimde veritaban\u0131 olu\u015fturaca\u011f\u0131n\u0131 biliyor mu? hay\u0131r&#8230;<br \/>\n\u0130\u015fte bu bildiriyi de e\u011fer web k\u0131sm\u0131nda \u00e7al\u0131\u015f\u0131yorsan\u0131z &#8220;web.config&#8221; dosyas\u0131nda, yok e\u011fer masa\u00fcst\u00fcnde tak\u0131l\u0131yorsan\u0131z &#8220;app.config&#8221; dosyas\u0131nda belirtebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\r\n&lt;configuration&gt;\r\n  &lt;configSections&gt;\r\n&lt;section name=&quot;entityFramework&quot; type=&quot;System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot; requirePermission=&quot;false&quot; \/&gt;\r\n  &lt;!-- For more information on Entity Framework configuration, visit http:\/\/go.microsoft.com\/fwlink\/?LinkID=237468 --&gt;&lt;\/configSections&gt;\r\n  &lt;startup&gt;\r\n    &lt;supportedRuntime version=&quot;v4.0&quot; sku=&quot;.NETFramework,Version=v4.5.2&quot; \/&gt;\r\n  &lt;\/startup&gt;\r\n  &lt;entityFramework&gt;\r\n    &lt;defaultConnectionFactory type=&quot;System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework&quot;&gt;\r\n      &lt;parameters&gt;\r\n        &lt;parameter value=&quot;mssqllocaldb&quot; \/&gt;\r\n      &lt;\/parameters&gt;\r\n    &lt;\/defaultConnectionFactory&gt;\r\n    &lt;providers&gt;\r\n      &lt;provider invariantName=&quot;System.Data.SqlClient&quot; type=&quot;System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer&quot; \/&gt;\r\n    &lt;\/providers&gt;\r\n  &lt;\/entityFramework&gt;\r\n  &lt;connectionStrings&gt;\r\n    &lt;add name=&quot;OrnekVeriDbContext&quot; connectionString=&quot;Server=.;Database=OrnekVeritabani;Trusted_Connection=true;&quot; providerName=&quot;System.Data.SqlClient&quot;\/&gt;\r\n  &lt;\/connectionStrings&gt;\r\n&lt;\/configuration&gt;\r\n<\/pre>\n<p>Yukar\u0131daki app.config dosyas\u0131na &#8220;connectionStrings&#8221; node&#8217;\u0131 eklenerek gerekli ayarlama yap\u0131lm\u0131\u015ft\u0131r. Tabi, sizlerin net g\u00f6rebilmesi benimde net izah edebilmem i\u00e7in ilgili par\u00e7ay\u0131 a\u015fa\u011f\u0131 almam\u0131z uygun olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\n  &lt;connectionStrings&gt;\r\n    &lt;add name=&quot;OrnekVeriDbContext&quot; connectionString=&quot;Server=.;Database=OrnekVeritabani;Trusted_Connection=true;&quot; providerName=&quot;System.Data.SqlClient&quot;\/&gt;\r\n  &lt;\/connectionStrings&gt;\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir connectionStrings node&#8217;\u0131 a\u00e7\u0131yor ve i\u00e7erisine ekleme yap\u0131yoruz. &#8220;name&#8221; \u00f6zelli\u011fine Context s\u0131n\u0131f\u0131m\u0131zla birebir ayn\u0131 ismi veriyoruz. Bunda zorunlu de\u011filiz lakin ba\u015fka Context&#8217;lere nazaran kar\u0131\u015f\u0131kl\u0131\u011f\u0131 \u00f6nledi\u011fi i\u00e7in tavsiye ediyorum. &#8220;connectionString&#8221; Attribute&#8217;una bildi\u011finiz Provider&#8217;\u0131m\u0131z\u0131 yaz\u0131yoruz. Ama burada dikkat!!! Yazd\u0131\u011f\u0131n\u0131z bu Provider&#8217;da ki veritaban\u0131 olmayan bir veritaban\u0131 olmas\u0131 gerekiyor. Olmas\u0131 gerekiyor ki, Code First yap\u0131s\u0131 kendisi olu\u015fturabilsin. Bunlar\u0131n yan\u0131nda &#8220;providerName&#8221; Attribute&#8217;u sayesinde ilgili ba\u011flant\u0131n\u0131n System.Data.SqlClient k\u00fct\u00fcphanesinde \u00e7al\u0131\u015faca\u011f\u0131n\u0131, yani SQL Server oldu\u011funu belirtmi\u015f oluyoruz.<\/p>\n<p>Bu i\u015flemlerden sonra Program.cs s\u0131n\u0131f\u0131nda &#8220;OrnekVeriDbContext&#8221; s\u0131n\u0131f\u0131ndan bir nesne \u00fcretip ilk olu\u015fumu seyredebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            OrnekVeriDbContext Veri = new OrnekVeriDbContext();\r\n            Veri.Database.Create();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z zaman neler olmu\u015f bakal\u0131m&#8230;<\/p>\n<div id=\"attachment_3725\" style=\"width: 199px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi-4\/\" rel=\"attachment wp-att-3725\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3725\" class=\"size-full wp-image-3725\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-3.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"189\" height=\"287\" \/><\/a><p id=\"caption-attachment-3725\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div>\n<p>Anahh \ud83d\ude42 G\u00f6rd\u00fcn\u00fcz m\u00fc, app.config dosyas\u0131nda belirtti\u011fim isimde bir veritaban\u0131 olu\u015fturulmu\u015f ve &#8220;OrnekTablo&#8221; isminde bir tablo eklenmi\u015ftir. Tabi olu\u015fturma a\u015famas\u0131nda Entity Framework mant\u0131\u011f\u0131 i\u015fte &#8220;OrnekTablo&#8221; de\u011fil &#8220;OrnekTabloes&#8221; olarak \u00e7o\u011ful maksatl\u0131 bir isimde eklenmi\u015ftir. Eee bunun niyeti, Linq To Sql&#8217;de oldu\u011fu gibi \u00e7o\u011ful olanlar\u0131 belirleyebilmektir. Velhas\u0131l sonraki yaz\u0131lar\u0131m\u0131zda bu tarz tablo isimleri vs. gibi de\u011ferlere, tablo olu\u015fum s\u00fcrecinde m\u00fcdahale edecek ve istedi\u011fimiz de\u011fi\u015fikli\u011fi uygulayabilece\u011fiz.<\/p>\n<p>\u015eimdi dikkatlerinizi olu\u015fturulan tablonun kolonlar\u0131na \u00e7ekmek istiyorum. Biz hi\u00e7 bir i\u015flem yapmad\u0131\u011f\u0131m\u0131z halde nas\u0131l oluyorda ID kolonu primary key olmu\u015f oluyor? ve hatta identity \u00f6zelli\u011fine bakarsan\u0131z e\u011fer birer birer artt\u0131\u011f\u0131n\u0131 bile g\u00f6rebilirsiniz.<\/p>\n<p>Bunun sebebi; Code First yap\u0131s\u0131nda, tablo olarak dizayn edilen s\u0131n\u0131fta tan\u0131mlanm\u0131\u015f ilk property otomatik olarak primary key g\u00f6r\u00fcl\u00fcyor ve identity \u00f6zelli\u011fi bire birden default atan\u0131yor. O y\u00fczden ilk propertynin ID oldu\u011funu belirtecek bir isim vermeye dikkat etmenizi \u00f6neriyorum.<\/p>\n<p>\u015eimdi bu bilgiyi unuttuk, ya da farkl\u0131 bir isimde primary key kolon tan\u0131mlamak istiyorum diyorsan\u0131z a\u015fa\u011f\u0131daki kod blo\u011funu inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OrnekTablo\r\n    {\r\n        public int hilmi { get; set; }\r\n        public string Kolon1 { get; set; }\r\n        public string Kolon2 { get; set; }\r\n    }\r\n<\/pre>\n<p>Varsayal\u0131m, ilk propertymizin ismi &#8220;hilmi&#8221; olsayd\u0131 ne gibi bir durumla kar\u015f\u0131la\u015f\u0131rd\u0131k.<\/p>\n<blockquote>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><strong><em>An unhandled exception of type &#8216;System.Data.Entity.ModelConfiguration.ModelValidationException&#8217; occurred in EntityFramework.dll<\/em><\/strong><\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><strong><em>Additional information: One or more validation errors were detected during model generation:<\/em><\/strong><\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><strong><em>EFCodeFirst.Model.Context.OrnekTablo: : EntityType &#8216;OrnekTablo&#8217; has no key defined. Define the key for this EntityType.<\/em><\/strong><\/span><\/p>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><strong><em>OrnekTablos: EntityType: EntitySet &#8216;OrnekTablos&#8217; is based on type &#8216;OrnekTablo&#8217; that has no keys defined.<\/em><\/strong><\/span><\/p>\n<\/blockquote>\n<p>Evet yukar\u0131daki gibi ilk propertymiz &#8220;hilmi&#8221; olsayd\u0131 bu hata mesaj\u0131yla kar\u015f\u0131la\u015f\u0131rd\u0131k. Hatta hata mesaj\u0131n\u0131n g\u00f6rselinide payla\u015fmak gerekirse buyurun.<br \/>\n<div id=\"attachment_3730\" style=\"width: 449px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi-5\/\" rel=\"attachment wp-att-3730\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3730\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-4.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"439\" height=\"137\" class=\"size-full wp-image-3730\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-4.png 439w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-4-300x94.png 300w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/a><p id=\"caption-attachment-3730\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div><br \/>\nBu hatan\u0131n yegane sebebi, &#8220;hilmi&#8221; isminde bir kolonun primary olma ihtimalinin s\u0131f\u0131r olmas\u0131d\u0131r. Yani derleme a\u015famas\u0131nda mimari bizden tablo ismiyle benzer ya da sadece id kolonu oldu\u011funu belirten bir property istedi\u011fini belirtiyor.<\/p>\n<p>Haliyle bizler tutturup illa ki &#8220;hilmi&#8221; kolonunun primary key olmas\u0131n\u0131 istiyorsak e\u011fer &#8220;Key&#8221; Attribute&#8217;unu ilgili propertye uygulamal\u0131y\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OrnekTablo\r\n    {\r\n        &#x5B;Key]\r\n        public int hilmi { get; set; }\r\n        public string Kolon1 { get; set; }\r\n        public string Kolon2 { get; set; }\r\n    }\r\n<\/pre>\n<p><div id=\"attachment_3731\" style=\"width: 213px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi-6\/\" rel=\"attachment wp-att-3731\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3731\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-5.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"203\" height=\"200\" class=\"size-full wp-image-3731\" \/><\/a><p id=\"caption-attachment-3731\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div><br \/>\nEkran g\u00f6r\u00fcnt\u00fcs\u00fcnde de g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;hilmi&#8221; isminde bir primary key kolon olu\u015fturmu\u015f olduk. Biliyorum \u00e7ok g\u00fcl\u00fcn\u00e7 \ud83d\ude00 \ud83d\ude00<br \/>\nUzun laf\u0131n k\u0131sas\u0131 burada anlatmak istedi\u011fim, tablonuzun ismi &#8220;A&#8221; ise ilk propertyi &#8220;AId&#8221;, &#8220;AID&#8221; veyahut &#8220;ID&#8221; gibi isimler vermeniz Entity Framework Code First a\u00e7\u0131s\u0131ndan kabul edilebilir bir durum olacakt\u0131r.<\/p>\n<h4>Code First \u0130le Veri Ekleme \/ Silme \/ G\u00fcncelleme<\/h4>\n<p>Asl\u0131nda Code First&#8217;e \u00f6zel bir ekleme\/silme veyahut g\u00fcncelleme i\u015flemi ger\u00e7ekle\u015ftirmeyece\u011fiz. \u015euana kadar yapt\u0131\u011f\u0131m\u0131z i\u015flemler neticesinde bir Entity Framework mimarisinde kulland\u0131\u011f\u0131m\u0131z normal veri modifikasyonu metod ve y\u00f6ntemlerini ele alaca\u011f\u0131z.<\/p>\n<div id=\"attachment_3735\" style=\"width: 663px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/entity-framework-ile-code-first-yaklasimi-7\/\" rel=\"attachment wp-att-3735\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3735\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-6.png\" alt=\"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131\" width=\"653\" height=\"114\" class=\"size-full wp-image-3735\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-6.png 653w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/03\/Entity-Framework-\u0130le-Code-First-Yakla\u015f\u0131m\u0131-6-300x52.png 300w\" sizes=\"auto, (max-width: 653px) 100vw, 653px\" \/><\/a><p id=\"caption-attachment-3735\" class=\"wp-caption-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/p><\/div>\n<p>Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde de g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;OrnekVeriDbContext&#8221; Context s\u0131n\u0131f\u0131m\u0131z i\u00e7erisinde DbSet<OrnekTablo> tipinde tuttu\u011fum &#8220;OrnekTablos&#8221; isimli property&#8217;imi g\u00f6r\u00fcyorsunuz. \u0130\u015fte Code First yakla\u015f\u0131m\u0131nda Context s\u0131n\u0131f\u0131 bu propertye, veritaban\u0131ndaki tabloyu fiziksel getirmekte ve i\u00e7indeki her bir veriyi bize &#8220;OrnekTablo&#8221; tipinden vermektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            OrnekVeriDbContext Veri = new OrnekVeriDbContext();\r\n            Veri.OrnekTablos.Add(new OrnekTablo\r\n            {\r\n                Kolon1 = &quot;\u00d6rnek veri kolon1 1&quot;,\r\n                Kolon2 = &quot;\u00d6rnek veri kolon2 1&quot;\r\n            });\r\n            Veri.SaveChanges();\r\n        }\r\n    }\r\n<\/pre>\n<p>Bu \u015fekilde veri eklenebilmekte,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            OrnekVeriDbContext Veri = new OrnekVeriDbContext();\r\n            OrnekTablo ornek = Veri.OrnekTablos.FirstOrDefault(o =&gt; o.ID == 1);\r\n            ornek.Kolon1 = &quot;\u00d6rnek veri kolon1 g\u00fcncel&quot;;\r\n            ornek.Kolon2 = &quot;\u00d6rnek veri kolon2 g\u00fcncel&quot;;\r\n            Veri.SaveChanges();\r\n        }\r\n    }\r\n<\/pre>\n<p>bu \u015fekilde veri g\u00fcncellenebilmekte,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            OrnekVeriDbContext Veri = new OrnekVeriDbContext();\r\n            OrnekTablo ornek = Veri.OrnekTablos.FirstOrDefault(o =&gt; o.ID == 1);\r\n            Veri.OrnekTablos.Remove(ornek);\r\n            Veri.SaveChanges();\r\n        }\r\n    }\r\n<\/pre>\n<p>bu \u015fekilde veri silinebilmekte<br \/>\nve<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            OrnekVeriDbContext Veri = new OrnekVeriDbContext();\r\n            foreach (var item in Veri.OrnekTablos)\r\n            {\r\n                Console.WriteLine($&quot;{item.Kolon1} {item.Kolon2}&quot;);\r\n            }\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>bu \u015fekilde verileri \u00e7ekebiliyoruz.<\/p>\n<p>Bu yaz\u0131m\u0131zda Entity Framework Code First yap\u0131s\u0131na giri\u015f yaparak, bir projeye entegrasyonun nas\u0131l sa\u011flanaca\u011f\u0131n\u0131, yap\u0131sal olarak nas\u0131l bir \u00e7al\u0131\u015fma sergilenmesi gerekti\u011fini ve temel veritaban\u0131 i\u015flemlerini incelemi\u015f olduk.<\/p>\n<p>Hemen bir sonraki yaz\u0131da Code First y\u00f6ntemiyle tablolar aras\u0131nda ili\u015fkinin nas\u0131l kurulaca\u011f\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p>Eee o halde sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\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, Linq To SQL gibi Entity Framework mimariside biz yaz\u0131l\u0131mc\u0131lara olduk\u00e7a h\u0131z kazand\u0131rmakta ve veritaban\u0131 i\u015flemlerinde at\u0131lan bir \u00e7a\u011f\u0131n basamaklar\u0131n\u0131 te\u015fkil etmektedir. Haliyle biz yaz\u0131l\u0131mc\u0131lar ister istemez bu mimarilere y\u00f6nelmekte ve meraklar\u0131m\u0131z\u0131n yan\u0131nda \u00e7al\u0131\u015fmalar\u0131m\u0131z\u0131&#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":[952,956,959,953,957,962,954,958,960,961],"class_list":["post-3712","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entity-framework","tag-code-first","tag-code-first-nedir","tag-connectionstrings","tag-database-first","tag-entityframework","tag-key","tag-model-first","tag-nuget","tag-providername","tag-system-data-sqlclient"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3712","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=3712"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3712\/revisions"}],"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=3712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=3712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=3712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}