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.
-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.
Aşağıda gördüğünüz üzere Tag tablonun adı ve Tags çağırılırken kullanılacağız parametre olacak.
Ve artık migration dosyalarımızda oluşturulduğuna göre çalıştırma zamanı.
Tablolarımızı hazır ettiğimize göre Startup.cs dosyasına gerekli kodları ekleyelim.
İlk olarak aşağıdaki kodlar
İlk olarak Entity Framework için geliştirilen Npgsql paketini çekelim.
dotnet add package Microsoft.EntityFrameworkCore --version 2.2.0Paket versiyonlarında hata almanız durumunda aşağıdaki komut Tools paketini çekebilirsiniz.
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 2.2.0Paketimizi ç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 IO.Swagger.Models ile modellerde kullanılan namespace ile mevcut dosyamızda çağırdık.
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; }
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 DataContextBu 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 DataContextHerhangi 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;Ve sonrasında ConfigureServices fonksiyonu altına aşağıdaki kodları ekleyelim
using Microsoft.EntityFrameworkCore;
services.AddEntityFrameworkNpgsql()Şimdi Controller dosyalarından UserApi.cs içinde bir deneme yapalım. İlk olarak aşağıdaki kodları
.AddDbContext<DataContext>()
.BuildServiceProvider();
using IO.Swagger.Data;ve sonrasında class constructor fonksiyonu olarak aşağıdaki şekilde ekleme yaparsanız
using Microsoft.EntityFrameworkCore;
private readonly DataContext _context;
public UserApiController(DataContext context)/v2/user post parametresine aşağıdaki şekilde düzenlerseniz kodu çağırmanız durumunda ekleme yapılacaktır.
{
_context = context;
}
[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/
Hiç yorum yok:
Yorum Gönder