.Net Core İle Pardus Üzerinde Uygulama Geliştirme
Merhaba,
Uzun bir aradan sonra Linux üzerindeki .Net Core Makalelerime devam etmeye karar verdim.
Genelde herkesin yaptığı gibi Ubuntu üzerinden anlatmaya devam edecektim. Fakat sonradan ülkemizde geliştirmesini yaptığımız
Pardus üzerinden bu konuyu anlatmak istedim. Açıkçası hepimizin açık kaynak kod sevdası olmakla birlikte
bu mecrada çalışan arkadaşlarımıza yazılımcılar olarak gerekli desteği vermediğimizi düşünüyorum.
Bundan dolayı da makalemi Pardus üzerinden anlatacağım. PARDUS, Debian GNU/Linux temelli Özgür ve Açık Kaynak kodlu bir işletim sistemidir. İnternet üzerinden ücretsiz olarak indirilebilmekte ve kurulabilmektedir.2003 yılında planlamış olup ilk kararlı sürümünü 2005 yılında çıkarmıştır. Pardus’a olum veya olumsuz bulanmaktadır. Fakat ben yukarıda belirttiğim gibi bu sistemleri biz kendimiz kullanmadıkça saha da yaygınlaştırmadıkça onun gerçek gelişimine katkı sağlayamayız.
Belki bizim burada yazacağımız makale ile Kurumsal Pardus kullanımları daha fazla artar ve geliştirme seviyemiz daha yüksek seviyelere ulaşır. Pardus’un kurumsal sitesindeki hedelerinden biri de aslında budur. Şimdiden Pardus üzerinde emeği geçen tüm arkadaşlarıma teşekkür ederim.
Ben Pardus işletim sistemini VmWare üzerine kurdum.
Sizler aşağıdaki seçeneklerden biri ile kurabilirsiniz.
- VmWare üzerine kurmak için takip edilecek önergeler için tıklayınız.
- Yeni bir kurulum olarak kurmak için takip edilecek önergeler için tıklayınız.
Pardus’un iso formatındaki dağıtımını https://www.pardus.org.tr/ sitesinden edinebilirsiniz.
Uygulamamızı bir efsane olan PHP+MySql ikilisini baz alarak yazmak istedim. Böylece .Net geliştiricileri de Linux ortamlarında bu ikili gibi yazılım geliştirebileceklerini görmelerini istedim.
Bundan sonra bize gerekli bileşenleri şu şekilde listeleye biliriz.
1. Visual Studio Code
2. .Net Core Sdk
3. Mysql/MariaDB
Visual Studio Code
Pardus Kurulumumuzu tamamladıysak bundan önceki Ubuntu makalesinde olduğu gibi Visual Studio Code uygulamamızı indirmemiz gerekiyor.
Buradaki makaleden bu indirme işlemini görebilirsiniz.
.Net Core Sdk
.Net Core Sdk tarafında ise henüz Pardus işletim sistemimiz çok yaygın olmadığı için direk göremeyeceksiniz. Umarım ileride bu işletim sistemimizi de bu listelerde direk görebilirsiniz.
Ayarları yaparken Debian 10 sürümünü baz alabilirsiniz. Ben aşağıda ayarları veriyor olacağım. Ama sistemler güncellendikçe Debian sürümü üzerinden ilerleyebilirsiniz.
Ubuntu da olduğu gibi Linux ortamına .Net Core kurmak için önce Microsoft Anahtarını repoya kayıt etmeliyiz. Daha sonra kurma ve güncelleme işlemlerini yapabilirsiniz.
Şimdi bir komut satırı açalım. Unutmayın komutları sırasıyla çalıştırmalısınız. Pardus Türkçelendirmesinde uçbirim öykünücüsü denmiştir.
Ben işlemleri rahat yapabilmek için root kullanıcısına geçiş yaptım. Aşağıdaki komut ile bunu yapabilirsiniz.
Microsoft Anahtarını repoya kayıt
1 2 3 4 5 6 7 8 9 10 |
wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor microsoft.asc.gpg sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ wget https://packages.microsoft.com/config/debian/10/prod.list sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list |
.NET Core 3.1 SDK Yükleme
1 2 3 4 5 6 7 8 |
sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install dotnet-sdk-3.1 |
Install the ASP.NET Core runtime
1 2 3 4 5 6 7 8 |
sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install aspnetcore-runtime-3.1 |
Install the .NET Core runtime
1 2 3 4 5 6 7 8 |
sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install dotnet-runtime-3.1 |
Mysql/MariaDB
Linux üzerinde işlem yapanlar ve php kullananlar için vazgeçilmez veritabanı MySqldi. Lakin Oracle’in satın almaları sonucunda eskiden düşük ücretle veya ücretsiz destek verilen bir çok ürünün desteği ücretli hale geldi. Bu ve bunun gibi bir çok dedi kodu sonucunda Maria DB Mysql baz alınarak daha doğrusu baz kodu üzerinden yeni bir dal başlatılarak geliştirilmeye başlandı. Genel olarak bildiğmiz ve kullandığımız MySql komut ve arayüzlerini kendisi içermektedir.
Kurulumu yapabilmek için tekrardan komut satırını açıyoruz. Daha sonra aşağıdaki kodu çalıştırmamız gerekmektedir.
1 2 3 4 5 |
sudo apt install default-mysql* |
Kurulum tamamlandıktan sonra
1 2 3 4 5 |
sudo mariadb -u root |
Uygulamamız için kendi uygulama kullanıcımızı oluşturmamız gerekiyor. root ile bağlanabilirmiydik evet ama disiplin ve güvenlik için yeni kullanıcı oluşturmalıyız. Demo yaparken bile bunları yaparsak alışkanlık edinmiş oluruz.
1 2 3 4 5 6 7 8 |
CREATE USER 'dbUser'@'localhost' IDENTIFIED BY 'parola'; GRANT ALL PRIVILEGES ON * . * TO 'dbUser'@'localhost'; FLUSH PRIVILEGES; exit; |
Hadi geliştirme işlemlerine başlayalım
Öncelikle visual studio code uygulamamızı açalım. Daha sonra terminal arayüzünü açarak işlemlerimize başlayalım.
terminal arayüzünde uygulamamızı oluşturmak istediğimiz dizine gidelim. Aşağıdaki komutu yazarak uygulama dizinini oluşturalım.
1 2 3 4 5 |
mkdir MyDbDemo |
dotnet uygulamamızı oluşturalım
1 2 3 4 5 |
dotnet new console |
uygulamamız oluştuktan sonra bize gerekli olan paketleri terminal üzerinden ekliyoruz.
1 2 3 4 5 6 7 |
dotnet add package Microsoft.EntityFrameworkCore.Tools dotnet add package Microsoft.EntityFrameworkCore.Tools.DotNet dotnet add package Pomelo.EntityFrameworkCore.MySql |
MariaDb’yi Entity Framework Core ile kolayca kullanabilmek için Pomelo nun paketinide sisteme ekliyoruz.
Öncelikle uygulamamıza StoreModel.cs ekledim. Entity sınıflarımızı bu kısma ekleyeceğiz. CodeFirst yaklaşımda olan sınıflarımız ile tabloların karşılıklarını bu şekilde oluşturmuş olacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System; using System.Collections.Generic; using System.Linq; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; namespace MyDbDemo { public class Product { [Key] public int Id {get;set;} public string Barcode { get; set; } public string Title { get; set; } public int Price { get; set; } public virtual Category Category { get; set; } } public class Category { [Key] public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Product> Products { get; set; } } } |
Daha sonra uygulamamıza StoreContext.cs dosyasını ekliyorum. StoreContext DbContext ‘ten türemektedir. Burada önemli olan OnConfiguring methodunun override edilmesidir. Farklı veritabanlarına bağlanırken veya biz bir veritabanı bağlantı arabilirimi tanımlamak isterisek geliştirme yapılması gereken kısım burasıdır. Pomelo ‘nun kodlarını inceleyerek bu kısmı anlayabilirsiniz.
1 2 3 4 5 6 7 8 |
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("server=localhost;database=store;user=user;password=password"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MyDbDemo { public class StoreContext : DbContext { public DbSet<Product> Products { get; set; } public DbSet<Category> Categories { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("server=localhost;database=store;user=user;password=password"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Category>(entity => { entity.HasKey(e => e.Id); entity.Property(e => e.Name).IsRequired(); }); modelBuilder.Entity<Product>(entity => { entity.HasKey(e => e.Id); entity.Property(e => e.Title).IsRequired(); entity.HasOne(d => d.Category) .WithMany(p => p.Products); }); } } } |
Veritabanı erişimlerimiz ve nesnelerimiz hazır olduğuna göre artık veri yazma ve okuma işlemlerini yapabiliriz. Bu kısma kadar olan yerde göreceğiniz gibi klasik EF işlemlerini yaparak ilerledik.
Şimdi Program.cs dosyasına gidelim ve işlemlerimizi yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
using System; using System.Collections.Generic; using System.Linq; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; namespace MyDbDemo { class Program { static void Main(string[] args) { Console.WriteLine("Sistem Başlıyor!"); using (var context = new StoreContext()) { context.Database.EnsureDeleted(); context.Database.EnsureCreated(); CreateProduct(context); Console.WriteLine("Ürünler oluşturuldu!"); ListProduct(context); Console.WriteLine("Ürünler Listelendi!"); Console.WriteLine("Çıkmak için bir tuşa basınız"); Console.ReadKey(); } } private static void ListProduct(StoreContext context) { Console.WriteLine("Ürünler Listeleniyor.\n"); var query = context.Products.ToList(); foreach (var product in query) Console.WriteLine("{0} | {1} | {2} | {3}", product.Id, product.Title, product.Price, product.Category.Name); } private static void CreateProduct(StoreContext context) { var homeCategory = new Category() { Name = "Ev Ürünleri" }; var enterpriseCategory = new Category() { Name = "Kurumsal Ürünler" }; context.Categories.Add(homeCategory); context.Categories.Add(enterpriseCategory); context.Products.Add(new Product() { Title = "Fritöz", Price = 100, Barcode="1115", Category = homeCategory }); context.Products.Add(new Product() { Title = "Matkap", Price = 1000, Barcode="1111111", Category = enterpriseCategory }); context.SaveChanges(); } } } |
Uygulamamızı tamamladıktan sonra yine terminalden aşağıdaki kod ile çalıştırabiliriz. Çıktısı aşağıdaki gibi olacaktır.
dotnet run
Uygulamamızın çıktısı yukarıdaki olacaktır. Kendi geliştirmemiz olan Pardus işletim sistemi üzerinde ufakta olsa geliştirmenin ne kadar kolay yapılabildiğini görmüş olduk.
Bu uygulamamız üzerine klasik loglama ve yine veritabanı sql loglarını oluşturabileceğiniz arabirimlerini ekleyerek uygulamayı genişletebilirsiniz.
Sağlıcakla kalın.