﻿
{"id":27155,"date":"2024-08-27T19:15:18","date_gmt":"2024-08-27T19:15:18","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=27155"},"modified":"2024-08-27T19:15:18","modified_gmt":"2024-08-27T19:15:18","slug":"entity-framework-core-8-ile-mongodb-kullanimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-core-8-ile-mongodb-kullanimi\/","title":{"rendered":"Entity Framework Core 8 \u0130le MongoDB Kullan\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde sizlere, .NET uygulamalar\u0131nda MongoDB kullan\u0131m\u0131n\u0131 olduk\u00e7a kolayla\u015ft\u0131ran ve EF Core 8 ile hayat\u0131m\u0131za girmi\u015f olan <em>MongoDB Entity Framework Core Provider<\/em>&#8216;\u0131ndan bahsediyor olaca\u011f\u0131m.<\/p>\n<p>Malumunuz bu g\u00fcne kadar .NET uygulamalar\u0131nda MongoDB&#8217;yi kullanabilmek i\u00e7in <a href=\"https:\/\/www.nuget.org\/packages\/mongodb.driver\" rel=\"noopener\" target=\"_blank\">MongoDB.Driver<\/a> k\u00fct\u00fcphanesinden istifade ediyorduk ve gerekli yap\u0131land\u0131rmalar\u0131 temel d\u00fczeyde kendimiz in\u015fa ediyorduk. Buna \u00f6rnek vermemiz gerekirse e\u011fer; bir &#8216;Person&#8217; kayd\u0131n\u0131 tutabilmek i\u00e7in gerekli geli\u015ftirmeleri a\u015fa\u011f\u0131daki gibi in\u015fa edip \u00e7al\u0131\u015fmalar\u0131m\u0131z\u0131 ger\u00e7ekle\u015ftiriyorduk.<\/p>\n<p>Entity&#8217;i olu\u015fturuyorduk;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Person\r\n    {\r\n        &#x5B;BsonId]\r\n        &#x5B;BsonElement(Order = 0)]\r\n        public ObjectId Id { get; set; }\r\n\r\n        &#x5B;BsonRepresentation(BsonType.String)]\r\n        &#x5B;BsonElement(Order = 1)]\r\n        public string? Name { get; set; }\r\n\r\n        &#x5B;BsonRepresentation(BsonType.String)]\r\n        &#x5B;BsonElement(Order = 2)]\r\n        public string? Surname { get; set; }\r\n\r\n        &#x5B;BsonRepresentation(BsonType.Int64)]\r\n        &#x5B;BsonElement(Order = 3)]\r\n        public int? Age { get; set; }\r\n    }\r\n<\/pre>\n<\/div>\n<p>ard\u0131ndan MongoDB yap\u0131land\u0131rmas\u0131n\u0131 y\u00f6netece\u011fimiz servisi olu\u015fturuyorduk;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MongoDBService\r\n    {\r\n        readonly IMongoDatabase _database;\r\n        public MongoDBService(IConfiguration configuration)\r\n        {\r\n            MongoClient client = new(&quot;mongodb:\/\/localhost:27017&quot;);\r\n            _database = client.GetDatabase(&quot;ExampleDB&quot;);\r\n        }\r\n        public IMongoCollection&lt;T&gt; GetCollection&lt;T&gt;() =&gt; _database.GetCollection&lt;T&gt;(typeof(T).Name.ToLowerInvariant());\r\n    }\r\n<\/pre>\n<\/div>\n<p>ve bu servisi IoC provider&#8217;\u0131na ekleyerek ihtiya\u00e7 noktalar\u0131nda a\u015fa\u011f\u0131daki gibi kullan\u0131yorduk;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddSingleton&lt;MongoDBService&gt;();\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\napp.MapPost(&quot;\/create-person&quot;, async (PersonVM personVM, MongoDBService mongoDBService) =&gt;\r\n{\r\n    IMongoCollection&lt;Person&gt; personCollection = mongoDBService.GetCollection&lt;Person&gt;();\r\n    await personCollection.InsertOneAsync(new()\r\n    {\r\n        Name = personVM.Name,\r\n        Surname = personVM.Surname,\r\n        Age = personVM.Age,\r\n    });\r\n});\r\napp.MapGet(&quot;\/get-persons&quot;, async (MongoDBService mongoDBService) =&gt;\r\n{\r\n    IMongoCollection&lt;Person&gt; personCollection = mongoDBService.GetCollection&lt;Person&gt;();\r\n    return await (await personCollection.FindAsync(p =&gt; true)).ToListAsync();\r\n});\r\n<\/pre>\n<\/div>\n<p>Evet, her ne kadar bu \u015fekilde bir kullan\u0131mla uzun s\u00fcredir \u00e7al\u0131\u015fma sergilersek sergileyelim EF Core yoksunlu\u011fundan dolay\u0131 bende dahil bir\u00e7o\u011fumuz gizli serzeni\u015fte bulunmuyordu de\u011fil \ud83d\ude42 Ee haliyle art\u0131k \u00e7al\u0131\u015fmalar\u0131m\u0131zda MongoDB&#8217;yi de rahatl\u0131kla EF Core ile y\u00f6netebilecek ve h\u0131zl\u0131ca standart sorgulama teknikleriyle i\u015f mant\u0131\u011f\u0131na odakl\u0131 geli\u015ftirmelerimize devam ediyor olaca\u011f\u0131z.<\/p>\n<p>Bunun i\u00e7in <code><a href=\"https:\/\/www.nuget.org\/packages\/MongoDB.EntityFrameworkCore\" rel=\"noopener\" target=\"_blank\">MongoDB.EntityFrameworkCore<\/a><\/code> k\u00fct\u00fcphanesinden yararlanaca\u011f\u0131z. \u0130lgili k\u00fct\u00fcphaneyi projeye y\u00fckledikten sonra gerisi bilinen EF Core yap\u0131land\u0131rmas\u0131d\u0131r diyebiliriz. Nas\u0131l m\u0131?<\/p>\n<p>\u00d6nce entity&#8217;i a\u015fa\u011f\u0131daki gibi olabildi\u011fince sade haliyle olu\u015fturuyoruz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Collection(&quot;persons&quot;)]\r\n    public class Person\r\n    {\r\n        public ObjectId Id { get; set; }\r\n        public string? Name { get; set; }\r\n        public string? Surname { get; set; }\r\n        public int? Age { get; set; }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Burada <code>Collection<\/code> attribute&#8217;u ad\u0131ndan da a\u015fikar oldu\u011fu \u00fczere bu entity&#8217;nin MongoDB&#8217;de hangi collection&#8217;a kar\u015f\u0131l\u0131k geldi\u011fini ifade etmektedir. Tabi bu yap\u0131land\u0131rmay\u0131 isterseniz a\u015fa\u011f\u0131daki sat\u0131rlarda g\u00f6rece\u011fimiz \u00fczere DbContext nesnesindeki Fluent API konfig\u00fcrasyonuna da b\u0131rakabilirsiniz.<\/p>\n<p>Devam\u0131nda bahsi ge\u00e7ti\u011fi \u00fczere EF Core&#8217;un temel yap\u0131ta\u015f\u0131 <em>DbContext<\/em> nesnemizi olu\u015fturuyoruz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class ApplicationDbContext : DbContext\r\n    {\r\n        public ApplicationDbContext(DbContextOptions options) : base(options)\r\n        {\r\n        }\r\n\r\n        public DbSet&lt;Person&gt; Persons { get; set; }\r\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\r\n        {\r\n            base.OnModelCreating(modelBuilder);\r\n\r\n            modelBuilder.Entity&lt;Person&gt;()\r\n                .ToCollection(&quot;persons&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere burada t\u00fcm entity ve konfig\u00fcrasyon tan\u0131mlar\u0131 EF Core a\u00e7\u0131s\u0131ndan ne biliyorsak o \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p>Ve son olarak da bu <em>DbContext<\/em> nesnesini uygulamaya <code>AddDbContext<\/code> metodu ile servis olarak ekliyoruz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddDbContext&lt;ApplicationDbContext&gt;(options =&gt; options.UseMongoDB(&quot;mongodb:\/\/localhost:27017&quot;, &quot;ExampleDB&quot;));\r\n<\/pre>\n<\/div>\n<p>Bitmi\u015ftir \ud83d\ude42 \u0130\u015fte b\u00f6ylece MongoDB&#8217;yi art\u0131k rahatl\u0131kla EF Core ile kullan\u0131labilir hale getirebiliyoruz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\napp.MapPost(&quot;\/create-database&quot;, async (ApplicationDbContext context) =&gt; context.Database.EnsureCreated());\r\napp.MapPost(&quot;\/create-person&quot;, async (PersonVM personVM, ApplicationDbContext context) =&gt;\r\n{\r\n    await context.Persons.AddAsync(personVM);\r\n    await context.SaveChangesAsync();\r\n});\r\napp.MapGet(&quot;\/get-persons&quot;, async (ApplicationDbContext context) =&gt; await context.Persons.ToListAsync());\r\n<\/pre>\n<\/div>\n<p>Bundan sonras\u0131 EF Core bilgisi gerektirdi\u011fi i\u00e7in t\u00fcm CRUD i\u015flemlerini sizlere b\u0131rak\u0131yor ve i\u00e7eri\u011fimizi burada noktal\u0131yorum.<\/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<p>Not : \u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki github adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/EFCore8.MongoDB.Example\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/EFCore8.MongoDB.Example<\/a><\/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 sizlere, .NET uygulamalar\u0131nda MongoDB kullan\u0131m\u0131n\u0131 olduk\u00e7a kolayla\u015ft\u0131ran ve EF Core 8 ile hayat\u0131m\u0131za girmi\u015f olan MongoDB Entity Framework Core Provider&#8216;\u0131ndan bahsediyor olaca\u011f\u0131m. Malumunuz bu g\u00fcne kadar .NET uygulamalar\u0131nda MongoDB&#8217;yi kullanabilmek 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":[5094,955,2914],"tags":[2851,5110,5109,2534],"class_list":["post-27155","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ef-core-8","category-entity-framework","category-entity-framework-core","tag-ef-core","tag-ef-core-8-mongodb","tag-ef-core-mongodb","tag-mongodb"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27155","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=27155"}],"version-history":[{"count":2,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27155\/revisions"}],"predecessor-version":[{"id":27157,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27155\/revisions\/27157"}],"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=27155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=27155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=27155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}