XPO ile O\R MAPPING -1
Merhabalar, bu makale serimizde Object Relational Mapping kavramından ve DevExpress ürün ailesine ait XPO ile temel veritabanı işlemlerimizi nasıl yapabileceğimizden bahsedeceğiz
Object Relational Mapping : O\R Mapping kısaca nesne tabanlı programlama dilleri ile ilişkisel veritabanları arasında ilişkilendirme yapmamızı sağlayan bir programlama tekniğidir. Yani veritabanı üzerinde yapacağımız işlemler için hiçbir Sql kodu yazmamız gerekmez. Veritabanı üzerindeki alanlara programımızda oluşturduğumuz sınıflar aracılığıyla ulaşıyoruz ve ekleme silme vb işlemleri sınıflar üzerinden yapıyoruz. Böylece veritabanı bağımsız uygulamalar yapabiliyoruz. Bu işlemi yapmamamız sağlayan çeşitli çözümler var açık kaynak kodlu Nhibernate, .Net 3.0 ile gelen LINQ, DevExpress Xpo bunlardan bir kaçı.
XPO:
Açılımı eXpress Persistent Objects olan XPO Developer Express’e ait O\R Mapping çözümüdür. XPO veritabanı katmanını uygulama geliştiriciden soyutlar ve onun sadece nesne tabanlı olarak çalışmasını sağlar. Uygulamamızı geliştirirken DevExpress.XPO namespace’imizi uygulamamızda belirtmemiz gerekiyor.
Sınıf oluşturma:
Sınıfımızı normal bir sınıf oluşturur gibi oluşturuyoruz. Tek farkı oluşturduğumuz sınıfın XPObject’den türetilmiş olması. Örneğin
class insan : XPObject
{
public string adi;
public string soyadi;
public int yasi;
public string cinsiyet;
}
Veritabanımızda olsa bile XPO not null alan tanımlamaya izin vermez. Bunları programatik olarak yakalamamız gerekir.
Temel Veritabanı işlemleri:
Temel veritabanı işlemlerine geçmeden önce veritabanı bağlantısı hakkında belirtmemiz gereken bir şey var. XPO eğer veritabanı yönetim sistemi hakkında birşey belirtmezsek varsayılan olarak Access’i kabul ediyor ve Access veritabanı oluşturuyor. Eğer farklı bir veritabanı yönetim sistemi belirtmek istiyorsak XpoDefault.ConnectionString deyimiyle veritabanı bilgilerimiz belirtmemiz gerekiyor. Örneğin
XpoDefault .ConnectionString = “Data Source=******;Initial Catalog=******;UID=mehmet;password=12345” ;
Veritabanı üzerinde işlemler yapabilmemiz için Session veya Unit of Work oluşturmamız gerekiyor. Ancak session oluşturmazsak uygulama tarafından DefaultSession kullanılıyor. En basit şekliyle bir ekleme işlemini şu şekilde gerçekleştiririz.
XpoDefault .ConnectionString = “Data Source=******;Initial Catalog=******;UID=mehmet;password=12345” ;
insan contact = new insan ();
contact.adi = “Ali”;
contact.soyadi = “Veli”;
contact.yasi = 23;
contact.cinsiyet = “Erkek”;
contact.Save();
Session:
Session’ları veritabanı işlemleri sırasında verileri tutan bir yapı olarak düşünebiliriz. Session’lar veritabanı işlemleri sırasında veritabanı bağlantı bilgilerinin bulunduğu Data Access Layer’ları kullanır. Sessionlar varsayılan olarak kullanılabileceği gibi kendi sessionlarımızı da oluşturabiliriz.
Session mySession = new Session();
Şeklinde session’ımızı oluşturabiliriz. Kendi oluşturduğumuz session’ı kullanabilmek için Constructor metodumuza session’ımızı iletmeliyiz. Daha sonra veritabanına bağlanabilmek için bu sessiona ait ConnectionString yada Connection özellikleri belirmemiz gerekiyor.
Session’a bağlanmak için Connect, bağlantıyı kesmek için Disconnect metodlarını kullanıyoruz. Ama Connect metodunu kullanmaz isek XPO otomatik olarak bağlanır. Bu durumda Connect metodu hiçbir şey yapmaz.
class insan : XPObject
{
public string adi;
public string soyadi;
public int yasi;
public string cinsiyet;
public Customer(Session session) : base(session) {}
}
Unit Of Work :
Unit of work’ler de session’larla aynı işi yaparlar. Aralarındaki tek fark Session’larda her değişiklik için Save metodu çağrılırken Unit of work lerde yapılan değişiklerin tutularak tek bir CommitChanges metoduyla tüm değişiklerin kaydedilebilmesidir. Ancak bunun için sınıfımız içinde OnChanged metodu kullanılmalıdır.
class insan : XPObject {
public insan(Session session) : base(session) { }
public insan(Session session, string name) : base(session) {
this.name = name;
}
private string ad;
public string Ad {
get { return ad; }
set {
string eski = Ad;
if(eski == value)
return;
ad = value;
OnChanged(“Ad”, eski, value);
}
}
Veritabanında yapacağımız işlemlerde eğer tablomuz yok ise XPO verdiğimiz bilgilere ve sınıfımıza göre bir tane oluşturuyor ve tek olan bir primary key OID atıyor. Eğer var olan bir tablo üzerinde işlemler yapmak istiyorsak sınıfımız veritabanımıza göre yazmamız yeterli. Eğer var olan bir Key kullanacaksak ve OID yi kullanmak istemiyorsak sınıfımızı XPObject’ten değil XPBaseObject’ten türetmelisiniz.
İlk makalemizde O/R Mapping’den, XPO’dan ve temel sınıf işlemlerinden bahsettik. Diğer makalemizde biraz daha veritabanı işlemlerine girmeye başlayacağız. Her türlü sorunuzu metkor@gmail.com dan iletebilirsiniz.
Leave a Reply