Merhaba Arkadaşlar,
Bu yazımda C# ile MySql arasında bağlantı kurup örnek CRUD işlemlerini anlatmaya çalışacağım.
Yöntem olarak C# ile MySql arasında bağlantı kurma yöntemlerinden Fluent Nhibernate ORM aracını kullanacağım.
İlk olarak Visual Studio’da File > New Project diyerek yeni proje oluşturuyoruz.
Paket Kurulumları
Nhibernate’i kullanabilmemiz için gerekli olan paketleri Package Manager Console üzerinden kuruyoruz.
Install-Package NHibernate -Version 5.2.0
Install-Package FluentNHibernate -Version 2.1.2
Install-Package MySql.Data -Version 8.0.13
Helper Sınıflarının Yazılması
İhtiyacımız olan paketleri başarılı kurduktan sonra Helper kısmına geçiyoruz.
Fluent Nhibernate birçok veri tabanını desteklemektedir (MS SQL, MYSQL, ORACLE , SQLITE vb). Biz de My Sql’i kullanabileceğimiz Helper dosyamızı geliştireceğiz. Ama öncesinde Ana helper sınıfımızı oluşturup MySqlHelper ve diğer helper’lar için ortak olan özellikleri belirleyeceğiz.
NhibernateHelper Sınıfının kodları aşağıdaki gibidir.
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 |
using NHibernate; using System; namespace NhibernateMySql { public abstract class NhibernateHelper : IDisposable { private static ISessionFactory _sessionFactory; public virtual ISessionFactory SessionFactory { get { return _sessionFactory ?? (_sessionFactory = InitializeFactory()); } } public virtual ISession OpenSession() { return SessionFactory.OpenSession(); } protected abstract ISessionFactory InitializeFactory(); public void Dispose() { GC.SuppressFinalize(this); } } } |
NhibernateMySql sınıfından miras alarak MySqlHelper sınıfımı oluşturuyorum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Reflection; using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using NHibernate; namespace NhibernateMySql { class MySqlHelper : NhibernateHelper { protected override ISessionFactory InitializeFactory() { var config = Fluently.Configure() .Database(MySQLConfiguration.Standard // Nhibernate bir çok veritabanını desteklemektedir. Burada hangi tip veritabanı kullacağımı belirliyoruz. .ConnectionString(c => c.FromConnectionStringWithKey("MySqlConnection"))) // veri tabanımızın yolunu app.config dosyasında ki hangi connectionstring parametresinden alacağını belirliyoruz .Mappings(t => t.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())); // Projede entity sınıflarımıza denk gelen map sınıflarını otomatik yakalamak için gereklidir. return config.BuildSessionFactory(); } } } |
Bu işlemleri yaptıktan sonra config dosyamızda connection bilgilerini tanımlıyoruz. Bu kısımda MySql veri tabanının hazır olduğunu düşünerek devam ediyorum. Eğer local ortamda çalışıyorsanız sadece sunucu kısmına localhost yazıp User Id ve password alanlarını silebilirsiniz
1 2 3 |
<connectionStrings> <add name="MySqlConnection" connectionString="server=sunucu;User Id=user;database=veritabani;password=sifreniz;Charset=utf8" /> </connectionStrings> |
Bu yazı özelinde aşağıdaki gibi basit bir tablo yapısı oluşturdum.
Şimdi de veri tabanındaki tablolara karşılık gelecek sınıflarımızı oluşturuyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
namespace NhibernateMySql { public class TestTable { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual string Description { get; set; } public override string ToString() { return "Id: " + Id + " || Name: " + Name + " || Description: " + Description; } } } |
Her sınıfımızın bir da Map sınıfı olmalıdır. Bu sınıfta tablomuza ait özellikleri belirtiyoruz. Örneğin: Tablo adı, kolon isimleri, uzunlukları, tablolar arasındaki ilişkiler vs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using FluentNHibernate.Mapping; namespace NhibernateMySql { public class TestTableMap: ClassMap<TestTable> { public TestTableMap() { Table("TestTable"); // default değer olarak sınıf isminin çoğul versiyonunu almaktadır. Eğer bu kısmı yazmazsak veri abanında TestTables isminde bir veritabanı arayacaktır. // tablo kolonlarını ve sahip olduğu özelliklerini burada tanımlıyoruz. Eğer bu kısımda tanımlama yapılmazsa yapılan değişiklikler veritabanına yansımayacaktır. Id(m => m.Id).GeneratedBy.Increment(); Map(m => m.Name).Length(255).Nullable(); Map(m => m.Description).Length(255).Nullable(); } } } |
Tablomuzu ve map sınıflarımızı oluşturduktan sonra artık CRUD (Create, Read, Update ve Delete) işlemlerini yapmaya hazırı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 31 32 33 34 |
static void Main(string[] args) { NhibernateHelper mySqlHelper = new MySqlHelper(); using (var session = mySqlHelper.OpenSession()) { // Yeni kayıt ekleme var entity = new TestTable() { Name = "SametGonez.com", Description = "Yazılım Uzmanı" }; session.Save(entity); session.Flush(); Console.WriteLine("Eklenen Kayıt: " + entity.ToString()); // Eklenen kayıt üzerinde güncelleme yapılması var addedEntity = session.Query<TestTable>().FirstOrDefault(w => w.Id == entity.Id); addedEntity.Description = "Yeni Açıklama Bilgisi"; session.SaveOrUpdate(addedEntity); session.Flush(); Console.WriteLine("Güncellenen Kayıt: " + addedEntity.ToString()); // varolan kaydın silinmesi session.Delete(addedEntity); session.Flush(); Console.WriteLine("Kayıt silindi"); } Console.ReadLine(); } |
Sonuç
Bu yazımda basit bir şekilde Fluent Nhibernate ORM aracını nasıl kullanabileceğimizi anlatmaya çalıştım. İlerleyen yazılarımda da daha detaylı konularada girmeye çalışacağım.
Sormak istediğiniz soru olursa yorum bölümünden sorabilirsiniz.
İyi günler dilerim.