﻿
{"id":10233,"date":"2019-01-31T17:21:59","date_gmt":"2019-01-31T17:21:59","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=10233"},"modified":"2019-01-31T17:21:59","modified_gmt":"2019-01-31T17:21:59","slug":"net-core-class-libraryde-migration-islemleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-core-class-libraryde-migration-islemleri\/","title":{"rendered":".NET Core &#8211; Class Library&#8217;de Migration \u0130\u015flemleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>.NET Core \u00e7ekirde\u011finde geli\u015ftirilen bir projede veritaban\u0131 i\u015flemlerinizi Class Library olarak ayr\u0131 bir katmanda ger\u00e7ekle\u015ftirmek istiyor olabilirsiniz. Lakin bu iste\u011finize istinaden gerekli i\u015flemleri yapt\u0131ktan sonra migration olu\u015ftururken &#8220;<em>Unable to create an object of type &#8216;Context&#8217;. For the different patterns supported at design time, see&#8230;<\/em>&#8221; hatas\u0131yla kar\u015f\u0131la\u015f\u0131yor olabilirsiniz. E\u011fer ki, bahsedilen hatay\u0131 ald\u0131ysan\u0131z ve hala bir \u00e7\u00f6z\u00fcm aray\u0131\u015f\u0131ndaysan\u0131z do\u011fru adrestesiniz. \u015eimdi gelin bu hataya tak\u0131lmaks\u0131z\u0131n Class Library&#8217;de veritaban\u0131 i\u015flemlerini nas\u0131l yapaca\u011f\u0131m\u0131z\u0131 inceleyelim.<\/p>\n<p>\u0130\u00e7eri\u011fimizde k\u00fc\u00e7\u00fck bir senaryo \u00fczerinden gidece\u011fimizden dolay\u0131 ilk olarak veritaban\u0131 i\u015flemlerini yapaca\u011f\u0131m\u0131z Class Library&#8217;de gerekli olan &#8220;Context&#8221; ve &#8220;Entity&#8221; yap\u0131lar\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class VTContext : DbContext\r\n    {\r\n        public VTContext(DbContextOptions&lt;VTContext&gt; options) : base(options)\r\n        {\r\n        }\r\n        public DbSet&lt;Employee&gt; Employees { get; set; }\r\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\r\n        {\r\n            optionsBuilder.UseSqlServer(&quot;Server=.;Database=NewDatabase;Trusted_Connection=True;&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Employee\r\n    {\r\n        public int Id { get; set; }\r\n        public string Name { get; set; }\r\n        public int Age { get; set; }\r\n    }\r\n<\/pre>\n<p>Gerekli &#8220;Context&#8221; ve &#8220;Entity&#8221; yap\u0131lar\u0131 olu\u015fturulduktan sonra s\u0131ra migrationlar\u0131 olu\u015fturmaya geldi. Bunun i\u00e7in Class Library projesinin dizininde a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi migration talimatlar\u0131n\u0131 vermemiz yeterli&#8230;<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri.png\" alt=\".NET Core - Class Library&#039;de Migration \u0130\u015flemleri\" width=\"1204\" height=\"130\" class=\"aligncenter size-full wp-image-10235\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri.png 1204w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-300x32.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-768x83.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1024x111.png 1024w\" sizes=\"auto, (max-width: 1204px) 100vw, 1204px\" \/><\/a><\/p>\n<p>\u0130\u015fte&#8230; G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere i\u00e7eri\u011fimizin ilk paragraf\u0131nda de\u011findi\u011fimiz ilgili hatayla kar\u015f\u0131la\u015fm\u0131\u015f bulunmaktay\u0131z.<\/p>\n<p>Bu hata, olu\u015fturdu\u011fumuz &#8220;VTContext&#8221; isimli kaynak ad\u0131nda bir nesneyi olu\u015fturacak tasar\u0131m\u0131n olmamas\u0131ndan kaynaklanmaktad\u0131r. Bunun i\u00e7in bizim bir strateji belirlememiz gerekecektir. O da \u015f\u00f6yledir;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory&lt;VTContext&gt;\r\n    {\r\n        public VTContext CreateDbContext(string&#x5B;] args)\r\n        {\r\n            var builder = new DbContextOptionsBuilder&lt;VTContext&gt;();\r\n            var connectionString = &quot;Server=.;Database=NewDatabase;Trusted_Connection=True;&quot;;\r\n            builder.UseSqlServer(connectionString);\r\n            return new VTContext(builder.Options);\r\n        }\r\n    }\r\n<\/pre>\n<p>Bu s\u0131n\u0131f\u0131 context ile ayn\u0131 dizinde olu\u015fturmam\u0131z yeterlidir. Tek yap\u0131lmas\u0131 gereken bulundu\u011fu projeyi bir seferli\u011fine Build etmektir. \u0130lgili s\u0131n\u0131f\u0131 incelersek e\u011fer; &#8220;IDesignTimeDbContextFactory&#8221; interface&#8217;i sayesinde &#8220;CreateDbContext&#8221; isimli bir metodu implement etmekte ve i\u00e7erik olarak <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-factory-method-design-patternfactory-method-tasarim-deseni\/\" rel=\"noopener\" target=\"_blank\">Factory Method Design Pattern<\/a>&#8216;i kullanarak bizlere belirtilen tipte context nesnesi \u00fcretmektedir. <\/p>\n<p>Dolay\u0131s\u0131yla bu durumda tekrar migration talimat\u0131n\u0131 verirsek;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1.png\" alt=\".NET Core - Class Library&#039;de Migration \u0130\u015flemleri\" width=\"993\" height=\"108\" class=\"aligncenter size-full wp-image-10238\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1.png 993w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1-300x33.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1-768x84.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-1-980x108.png 980w\" sizes=\"auto, (max-width: 993px) 100vw, 993px\" \/><\/a><br \/>\nekran g\u00f6r\u00fcnt\u00fcs\u00fcnden anla\u015f\u0131laca\u011f\u0131 \u00fczere migration sorunsuz bir \u015fekilde ba\u015far\u0131yla olu\u015fturulacakt\u0131r. Hatta olu\u015fturulan t\u00fcm migrasyonlar veritaban\u0131na yans\u0131t\u0131larak veritaban\u0131 olu\u015fturulmu\u015f ve tablolar bas\u0131lm\u0131\u015ft\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-2.png\" alt=\".NET Core - Class Library&#039;de Migration \u0130\u015flemleri\" width=\"180\" height=\"305\" class=\"aligncenter size-full wp-image-10240\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-2.png 180w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/NET-Core-Class-Libraryde-Migration-\u0130\u015flemleri-2-177x300.png 177w\" sizes=\"auto, (max-width: 180px) 100vw, 180px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere .NET Core projelerinde veritaban\u0131 i\u015flemlerinizi bu \u015fekilde Class Library&#8217;e alabilir ve micro service tad\u0131nda \u00e7al\u0131\u015fmalar\u0131n\u0131za devam edebilirsiniz.<\/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, .NET Core \u00e7ekirde\u011finde geli\u015ftirilen bir projede veritaban\u0131 i\u015flemlerinizi Class Library olarak ayr\u0131 bir katmanda ger\u00e7ekle\u015ftirmek istiyor olabilirsiniz. Lakin bu iste\u011finize istinaden gerekli i\u015flemleri yapt\u0131ktan sonra migration olu\u015ftururken &#8220;Unable to create an object of&#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":10242,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739,2668,2656],"tags":[2664,2740,2741,2746,2745,260,484,2747],"class_list":["post-10233","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","tag-net-core","tag-net-core-hata","tag-net-core-hata-cozumu","tag-net-core-migrations","tag-class-library","tag-hata","tag-hata-cozumu","tag-idesigntimedbcontextfactory"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10233","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=10233"}],"version-history":[{"count":6,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10233\/revisions"}],"predecessor-version":[{"id":10243,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10233\/revisions\/10243"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/10242"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=10233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}