16 Aralık 2018 Pazar

.NET Core Web Api PostgreSQL Kullanımı

  Ahmet Şimşek       16 Aralık 2018 Pazar

Bu yazıda swagger codegen ile oluşturduğumuz .NET Core Rest Api projesine PostgreSQL veritabanını dahil edeceğiz.

İlk olarak Entity Framework için geliştirilen Npgsql paketini çekelim.
dotnet add package Microsoft.EntityFrameworkCore --version 2.2.0
Paket versiyonlarında hata almanız durumunda aşağıdaki komut Tools paketini çekebilirsiniz.
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.2.0
Paketimizi çektiğimizde göre şimdi çalışabileceğimiz bir veritabanı oluşturalım.
createdb api
Şimdi aşağıdaki komut ile proje içerisinde kullanacağımız veritabanı dosyalarını oluşturalım. Parantez içindeki alanlara çalıştığınız veritabanı bilgilerini girmeniz gerekiyor.
dotnet ef dbcontext scaffold "Host=localhost;Database=api;Username=postgres;Password=password" Npgsql.EntityFrameworkCore.PostgreSQL -c DataContext -o Data
-c parametresi ile tüm tabloları DataContext dosyası üzerinden yöneteceğiz.
-o parametresi ile DataContext dosyasının Data klasörüne oluşturulmasını istediğimizi belirtiyoruz.

Komut başarılı bir şekilde çalıştıysa proje ana dizininde Data klasörü ve onun içinde DataContext.cs dosyasını görebilirsiniz. Bir hata aldıysanız aynı komutu --verbose parametresini ekleyerek çalışan komutların loglarını takip ederek hatayı daha detaylı inceleyebilirsiniz.

Şimdi petstore model dosyalarını DataContext dosyamıza aşağıdaki şekilde dahil edelim.
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using IO.Swagger.Models;
namespace IO.Swagger.Data
{
    public partial class DataContext : DbContext
    {
        public DbSet<Category> Categorys { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Pet> Pets { get; set; }
        public DbSet<Tag> Tags { get; set; }
        public DbSet<User> Users { get; set; }
using IO.Swagger.Models ile modellerde kullanılan namespace ile mevcut dosyamızda çağırdık.

Aşağıda gördüğünüz üzere Tag tablonun adı ve Tags çağırılırken kullanılacağız parametre olacak.
public DbSet<Tag> Tags { get; set; }
Evet DataContext.cs dosyamıza tüm modelleri eklediğimize göre artık migration dosyalarını oluşturabiliriz. Migration dosyalarını oluşturarak tüm veritabanı tablolarını oluşturacağımız dosyayı hazır etmiş olacağız.
dotnet ef migrations add PostgreSQLMigration --context DataContext
Bu komut sonrasında Migrations klasöründe oluşan dosyaları görebilirsiniz. Hata almanız durumunda yukarıda belirttiğim --verbose parametresini kullanın.

Ve artık migration dosyalarımızda oluşturulduğuna göre çalıştırma zamanı.
dotnet ef database update --context DataContext
Herhangi bir hata almadan komut tamamlandıysa veritabanında yukarıda yazan 5 adet tabloyu aşağıdaki şekilde görebilirsiniz.


Tablolarımızı hazır ettiğimize göre Startup.cs dosyasına gerekli kodları ekleyelim.

İlk olarak aşağıdaki kodlar
using IO.Swagger.Data;
using Microsoft.EntityFrameworkCore;
Ve sonrasında ConfigureServices fonksiyonu altına aşağıdaki kodları ekleyelim
services.AddEntityFrameworkNpgsql()
  .AddDbContext<DataContext>()
  .BuildServiceProvider();
Şimdi Controller dosyalarından UserApi.cs içinde bir deneme yapalım. İlk olarak aşağıdaki kodları
using IO.Swagger.Data;
using Microsoft.EntityFrameworkCore; 
ve sonrasında class constructor fonksiyonu olarak aşağıdaki şekilde ekleme yaparsanız
private readonly DataContext _context; 
public UserApiController(DataContext context)
{
        _context = context;
}
/v2/user post parametresine aşağıdaki şekilde düzenlerseniz kodu çağırmanız durumunda ekleme yapılacaktır.
        [HttpPost]
        [Route("/v2/user")]
        [ValidateModelState]
        [SwaggerOperation("CreateUser")]
        public  IActionResult CreateUser([FromBody]User body)
        {
            //TODO: Uncomment the next line to return response 0 or use other options such as return this.NotFound(), return this.BadRequest(..), ...
            // return StatusCode(0);
        _context.Users.Add(body);
        _context.SaveChanges();
return StatusCode(0);
            //throw new NotImplementedException();
        }

Daha detaylı bilgi için kaynaklar;
http://www.npgsql.org/efcore/index.html
https://docs.microsoft.com/tr-tr/ef/core/get-started/netcore/
logoblog

Thanks for reading .NET Core Web Api PostgreSQL Kullanımı

Previous
« Prev Post

Hiç yorum yok:

Yorum Gönder