{"id":114,"date":"2019-12-05T10:15:28","date_gmt":"2019-12-05T10:15:28","guid":{"rendered":"http:\/\/144.76.171.171\/blog\/?p=114"},"modified":"2021-01-25T13:54:28","modified_gmt":"2021-01-25T13:54:28","slug":"entity-framework-ile-code-first-yaklasimi","status":"publish","type":"post","link":"https:\/\/berenkudaygorun.com\/blog\/blog\/2019\/12\/05\/entity-framework-ile-code-first-yaklasimi\/","title":{"rendered":"Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131"},"content":{"rendered":"<p>Merhabalar bu yaz\u0131da Code First yakla\u015f\u0131m\u0131 \u00fczerinde durup basit bir proje yapaca\u011f\u0131z. \u0130yi okumalar...<\/p>\n<p>\u0130lk olarak Code First Nedir, bununla ba\u015flayal\u0131m. Projenizde olu\u015fturdu\u011funuz modeller arac\u0131l\u0131\u011f\u0131 ile Entity Framework araya girerek bu modelleri tablolara d\u00f6n\u00fc\u015ft\u00fcrebilmektedir. Ayr\u0131ca sql dilinde vermi\u015f oldu\u011funuz b\u00fct\u00fcn \u00f6zellikleri bu modeller arac\u0131l\u0131\u011f\u0131 ilede verebilirsiniz. Mesela bu alan zorunludur, max karakter say\u0131s\u0131 255'tir v.b. Bunlarla alakal\u0131 payla\u015f\u0131mlar\u0131 daha sonra yapaca\u011f\u0131m. Bu yaz\u0131da tek sayfada bir Code First Projesi \u00f6rne\u011fi verece\u011fim. \u0130lk olarak tablomuza kar\u015f\u0131l\u0131k gelecek bir model olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-csharp\">    public class Tablo\n    {\n        public int Id { get; set; }\n        public string Isim { get; set; }\n        public string Soyisim { get; set; }\n        public bool IsDelete { get; set; }\n    }<\/code><\/pre>\n<p>Yukar\u0131daki kod a\u00e7\u0131k bi r\u015fekilde tablomuzda 4 alan oldu\u011funu bunlar\u0131n ID, Isim, Soyisim ve IsDelete oldu\u011funu s\u00f6ylemektedir. \u0130lk property'nin i\u00e7erisinde Id kelimesi ge\u00e7iyorsa Entity Framework bunu otomatik olarak, tablolar\u0131m\u0131zda ID k\u0131sm\u0131yla \u00f6zle\u015ftirip <code>NOT NULL PRIMARY KEY<\/code> gibi \u00f6zellikleri kendisi tan\u0131mlayacakt\u0131r.<\/p>\n<p>Daha sonras\u0131nda projemize Entity Framwork'\u00fc dahil etmemiz gerekecektir. Direkt olarak bunu <code>Manage NuGet Packages<\/code> \u00fczerinden projenize <code>EntityFramework<\/code>'\u00fc dahil etmeniz gerekecektir. Y\u00fckleme i\u015flemlerinden sonra gerekli DLL'ler Reference k\u0131sm\u0131na eklenecek ve art\u0131k projemizde Entity Framework'\u00fc kullanmaya haz\u0131r olaca\u011f\u0131z.<\/p>\n<p>Daha sonras\u0131nda VeriTabani isimli bir class daha olu\u015fturdum ve bu class i\u00e7in DbContext'ten miras ald\u0131m. \u0130\u00e7erisinde tablolar\u0131m\u0131 (modellerimi) tan\u0131mlayaca\u011f\u0131m.<\/p>\n<pre><code class=\"language-csharp\">    public class VeriTabani : DbContext\n    {\n        public VeriTabani() : base(&quot;name = VeriTabaniContext&quot;) { }\n        public virtual DbSet&lt;Tablo&gt; Tablo { get; set; }\n\n        protected override void OnModelCreating(DbModelBuilder modelBuilder)\n        {\n            base.OnModelCreating(modelBuilder);\n        }\n\n    }<\/code><\/pre>\n<p><code>public VeriTabani() : base(&quot;name = VeriTabaniContext&quot;) { }<\/code> k\u0131sm\u0131nda bulunan name k\u0131sm\u0131 ConnectionString'imizde kullanaca\u011f\u0131m\u0131z alan olacakt\u0131r. Ayr\u0131ca burada bulunan <code> public virtual DbSet&lt;Tablo&gt; Tablo { get; set; }<\/code> k\u0131sm\u0131 ise tablomuza kar\u015f\u0131l\u0131k gelmektedir. K\u0131sacas\u0131 \u015fu \u015fekilde d\u00fc\u015f\u00fcnebilirsiniz DbSet'ler tablolar, DbContext ise Veri Tabanlar\u0131na denktir.<\/p>\n<p>\u015eimdi static bir class tan\u0131mlayarak temel veritaban\u0131 i\u015flemleri yapaca\u011f\u0131m\u0131z k\u0131s\u0131mlar\u0131 g\u00f6relim.<\/p>\n<pre><code class=\"language-csharp\"> public static class VeritabaniIslemleri\n    {\n        public static void VeriEkle(string isim)\n        {\n            var d = new VeriTabani();\n            d.Tablo.Add(new Tablo\n            {\n                Isim = isim,\n                IsDelete = false\n            });\n\n            d.SaveChanges();\n        }\n\n        public static void VeriGuncelle(int id)\n        {\n            var d = new VeriTabani();\n            var veri = d.Tablo.FirstOrDefault(x =&gt; x.Id == id);\n            veri.Soyisim = &quot;G\u00d6R\u00dcN&quot;;\n            d.SaveChanges();\n\n        }\n\n        public static void VeriGetir()\n        {\n            var d = new VeriTabani();\n            var sonuc = d.Tablo;\n            foreach (var item in sonuc)\n            {\n                Console.WriteLine(item.Isim);\n            }\n        }\n    }<\/code><\/pre>\n<p>Buradaki i\u015flemler son derece temel ve konunun ba\u015flang\u0131\u00e7 seviyesindeki ki\u015filer i\u00e7in anla\u015fa\u0131labilmesi i\u00e7in herhangi bir katman kullan\u0131lmadan direkt olarak yaz\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p>Son olarak App.config dosyas\u0131n\u0131n i\u00e7erisine connectionStrings k\u0131sm\u0131nda dahil etmemiz gerekmektedir. Dahil edece\u011fimiz alan <\/p>\n<pre><code class=\"language-xml\">&lt;connectionStrings&gt;\n   &lt;add name = &quot;VeriTabaniContext&quot;\n      connectionString = &quot;Data Source=KUDAYPC;Initial Catalog=VeriTabani;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False&quot;\n      providerName = &quot;System.Data.SqlClient&quot;\/&gt;\n&lt;\/connectionStrings&gt;<\/code><\/pre>\n<p>Evet ba\u011flant\u0131m\u0131zda art\u0131k haz\u0131r. Son olarak Main metodu alt\u0131nda veri taban\u0131 i\u015flemlerini yapal\u0131m ve projenin kodlar\u0131n\u0131 komple bir g\u00f6erlim.<\/p>\n<pre><code class=\"language-csharp\">    class Program\n    {\n        static void Main(string[] args)\n        {\n            VeritabaniIslemleri.VeriEkle(&quot;Beren Kuday&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Fatih Terim&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Milan Baro\u015f&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Arda Turan&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Lincoln&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Melo&quot;);\n\n            VeritabaniIslemleri.VeriGuncelle(1);\n\n            VeritabaniIslemleri.VeriGetir();\n        }\n    }<\/code><\/pre>\n<p>\u015eimdi bu i\u015flemleri tamamlad\u0131ktan sonra Program.cs dosyam\u0131zla App.config dosyalar\u0131m\u0131za tekrardan bir bakal\u0131m.<br \/>\nProgram.cs Dosyas\u0131:<\/p>\n<pre><code class=\"language-csharp\">using System;\nusing System.Collections.Generic;\nusing System.Data.Entity;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace CodeFirstg\n{\n    public class Tablo\n    {\n        public int Id { get; set; }\n        public string Isim { get; set; }\n        public string Soyisim { get; set; }\n        public bool IsDelete { get; set; }\n    }\n\n    public class VeriTabani : DbContext\n    {\n        public VeriTabani() : base(&quot;name = VeriTabaniContext&quot;) { }\n        public virtual DbSet&lt;Tablo&gt; Tablo { get; set; }\n\n        protected override void OnModelCreating(DbModelBuilder modelBuilder)\n        {\n            base.OnModelCreating(modelBuilder);\n        }\n\n    }\n    public static class VeritabaniIslemleri\n    {\n        public static void VeriEkle(string isim)\n        {\n            var d = new VeriTabani();\n            d.Tablo.Add(new Tablo\n            {\n                Isim = isim,\n                IsDelete = false\n            });\n\n            d.SaveChanges();\n        }\n\n        public static void VeriGuncelle(int id)\n        {\n            var d = new VeriTabani();\n            var veri = d.Tablo.FirstOrDefault(x =&gt; x.Id == id);\n            veri.Soyisim = &quot;G\u00d6R\u00dcN&quot;;\n            d.SaveChanges();\n\n        }\n\n        public static void VeriGetir()\n        {\n            var d = new VeriTabani();\n            var sonuc = d.Tablo;\n            foreach (var item in sonuc)\n            {\n                Console.WriteLine(item.Isim);\n            }\n        }\n    }\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            VeritabaniIslemleri.VeriEkle(&quot;Beren Kuday&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Fatih Terim&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Milan Baro\u015f&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Arda Turan&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Lincoln&quot;);\n            VeritabaniIslemleri.VeriEkle(&quot;Melo&quot;);\n\n            VeritabaniIslemleri.VeriGuncelle(1);\n\n            VeritabaniIslemleri.VeriGetir();\n        }\n    }\n}\n<\/code><\/pre>\n<p>App.config Dosyas\u0131:<\/p>\n<pre><code class=\"language-xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;\n&lt;configuration&gt;\n  &lt;configSections&gt;\n        &lt;!-- For more information on Entity Framework configuration, visit http:\/\/go.microsoft.com\/fwlink\/?LinkID=237468 --&gt;\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;\n    &lt;\/configSections&gt;\n    &lt;startup&gt; \n        &lt;supportedRuntime version=&quot;v4.0&quot; sku=&quot;.NETFramework,Version=v4.6.1&quot; \/&gt;\n    &lt;\/startup&gt;\n  &lt;runtime&gt;\n    &lt;assemblyBinding xmlns=&quot;urn:schemas-microsoft-com:asm.v1&quot;&gt;\n      &lt;dependentAssembly&gt;\n        &lt;assemblyIdentity name=&quot;System.Runtime.CompilerServices.Unsafe&quot; publicKeyToken=&quot;b03f5f7f11d50a3a&quot; culture=&quot;neutral&quot; \/&gt;\n        &lt;bindingRedirect oldVersion=&quot;0.0.0.0-4.0.6.0&quot; newVersion=&quot;4.0.6.0&quot; \/&gt;\n      &lt;\/dependentAssembly&gt;\n      &lt;dependentAssembly&gt;\n        &lt;assemblyIdentity name=&quot;System.Memory&quot; publicKeyToken=&quot;cc7b13ffcd2ddd51&quot; culture=&quot;neutral&quot; \/&gt;\n        &lt;bindingRedirect oldVersion=&quot;0.0.0.0-4.0.1.1&quot; newVersion=&quot;4.0.1.1&quot; \/&gt;\n      &lt;\/dependentAssembly&gt;\n      &lt;dependentAssembly&gt;\n        &lt;assemblyIdentity name=&quot;System.ComponentModel.Annotations&quot; publicKeyToken=&quot;b03f5f7f11d50a3a&quot; culture=&quot;neutral&quot; \/&gt;\n        &lt;bindingRedirect oldVersion=&quot;0.0.0.0-4.2.1.0&quot; newVersion=&quot;4.2.1.0&quot; \/&gt;\n      &lt;\/dependentAssembly&gt;\n    &lt;\/assemblyBinding&gt;\n  &lt;\/runtime&gt;\n  &lt;entityFramework&gt;\n    &lt;providers&gt;\n      &lt;provider invariantName=&quot;System.Data.SqlClient&quot; type=&quot;System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer&quot; \/&gt;\n    &lt;\/providers&gt;\n  &lt;\/entityFramework&gt;\n  &lt;connectionStrings&gt;\n   &lt;add name = &quot;VeriTabaniContext&quot;\n      connectionString = &quot;Data Source=KUDAYPC;Initial Catalog=VeriTabani;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False&quot;\n      providerName = &quot;System.Data.SqlClient&quot;\/&gt;\n&lt;\/connectionStrings&gt;\n&lt;\/configuration&gt;<\/code><\/pre>\n<p>Bu a\u015famadan sonra Packafe Manager Console'u a\u00e7mam\u0131z gerekmektedir. Burada yapacaklar\u0131m\u0131z migration i\u015flemleri olacakt\u0131r. Yani veritaban\u0131m\u0131zla tablolar\u0131m\u0131z\u0131 olu\u015fturaca\u011f\u0131z. Yapaca\u011f\u0131m\u0131z komutlar s\u0131ras\u0131yla:<\/p>\n<ol>\n<li><strong>Enable-Migrations<\/strong>: Migration i\u015flemi yapam\u0131za izin verecek komut.<\/li>\n<li><strong>Add-Migration<\/strong>: Bizim i\u00e7in gerekli migration dosyalar\u0131n\u0131 olu\u015fturaak komut.<\/li>\n<li><strong>Update-Database<\/strong>: Olu\u015fturulan dosyalardaki i\u015flemleri veritaban\u0131na yans\u0131tacak komut.<\/li>\n<\/ol>\n<p>Art\u0131k veritaban\u0131m\u0131z ve tablomuz olu\u015fturuldu projemizi ba\u015flatabiliriz. Projeyi \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda kar\u015f\u0131m\u0131za gelecek ekranda:<\/p>\n<pre><code>Beren Kuday\nFatih Terim\nMilan Baro\u015f\nArda Turan\nLincoln\nMelo\nPress any key to continue . . .<\/code><\/pre>\n<p>Yazacakt\u0131r ayr\u0131ca veritaban\u0131n\u0131 kontrol ederseniz, yap\u0131lan i\u015flemlerin veri taban\u0131na da yans\u0131d\u0131\u011f\u0131n\u0131 g\u00f6receksinizdir. \u0130yi \u00e7al\u0131\u015fmalar dilerim.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhabalar bu yaz\u0131da Code First yakla\u015f\u0131m\u0131 \u00fczerinde durup basit bir proje yapaca\u011f\u0131z. \u0130yi okumalar&#8230; \u0130lk olarak Code First Nedir, bununla ba\u015flayal\u0131m. Projenizde olu\u015fturdu\u011funuz modeller arac\u0131l\u0131\u011f\u0131&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/berenkudaygorun.com\/blog\/blog\/2019\/12\/05\/entity-framework-ile-code-first-yaklasimi\/\">Devam\u0131n\u0131 oku<span class=\"screen-reader-text\">Entity Framework \u0130le Code First Yakla\u015f\u0131m\u0131<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,466],"tags":[71,70],"class_list":["post-114","post","type-post","status-publish","format-standard","hentry","category-c-sharp","category-mssql","tag-code-first","tag-entity-framework","entry"],"_links":{"self":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/comments?post=114"}],"version-history":[{"count":3,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/114\/revisions"}],"predecessor-version":[{"id":117,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/114\/revisions\/117"}],"wp:attachment":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/media?parent=114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/categories?post=114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/tags?post=114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}