Bu yazımızda Entity Framework mimarisinin Code First yaklaşımında, IValidatableObject Interface’i ile kolonlara validasyon uygulamayı detaylı bir şekilde irdeleyeceğiz.

Bu yazımızda Entity Framework mimarisinin Code First yaklaşımında, IValidatableObject Interface’i ile kolonlara validasyon uygulamayı detaylı bir şekilde irdeleyeceğiz.

Örnek amaçlı aşağıdaki öğrenci tablosunu temsil eden sınıfımızı baz alacağız.

class Ogrenci
{
    public int OgrenciID { get; set; }
    public string Adi { get; set; }
    public string SoyAdi { get; set; }
    public string Memleketi { get; set; }
}

Validasyon uygulayacağımız sınıfa öncelikle “System.ComponentModel.DataAnnotations” kütüphanesini using etmeliyiz. Ardından ilgili kütüphane içerisindeki “IValidatableObject” Interface’inden sınıfımızı türetmeliyiz.

class Ogrenci : System.ComponentModel.DataAnnotations.IValidatableObject
{
    public int OgrenciID { get; set; }
    public string Adi { get; set; }
    public string SoyAdi { get; set; }
    public string Memleketi { get; set; }
 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
 
    }
}

Gördüğünüz gibi “IValidatableObject” Interface’ini implement ettikten sonra “Validate” isimli metodu uygulamaktadır. İşte bu metod içerisinde validasyonlarımızı gerçekleştireceğiz.

class Ogrenci : System.ComponentModel.DataAnnotations.IValidatableObject
{
    public int OgrenciID { get; set; }
    public string Adi { get; set; }
    public string SoyAdi { get; set; }
    public string Memleketi { get; set; }
 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (Adi.Length < 5 || Adi.Length > 35)
        {
            yield return new ValidationResult("Adınız 5'ten büyük, 35'ten küçük olmalıdır.", new List<string> { "Adi" });
        }
    }
}

Örnek olarak yukarıdaki işlemi incelerseniz eğer “Adi” kolonuna bir kontrol uygulanmıştır. Bu kontrol neticesinde geriye mesaj niteliğinde bir değer dönebiliyoruz.

Proje ile veritabanı arasında bağlantıyı oluşturacak Context sınıfını ve gerekli işlemleri yaptığımızı varsayıyorum

class Program
{
    static void Main(string[] args)
    {
        OkulDBContext Veri = new OkulDBContext();
        if (!Veri.Database.Exists())
        {
            Veri.Database.Create();
        }
 
        Ogrenci ogrenci = new Ogrenci();
        ogrenci.Adi = "Can";
        Veri.Ogrenciler.Add(ogrenci);
        Veri.SaveChanges();
 
        Console.Read();
    }
}

Yukarıdaki kod bloğunu incelerseniz eğer “Adi” kolonundaki validasyona uymayacak şekilde bir veri girilmiştir. Haliyle SaveChanges() metodu çağrıldığı anda aşağıdaki olası durumla karşılaşıyoruz.

Entity Framework - Code First’te IValidatableObject Ä°le Kolonlara Validasyon Ayarlama

Hele birde şu komutları try catch bloklarına aldığımızda bakalım

Entity Framework - Code First’te IValidatableObject Ä°le Kolonlara Validasyon Ayarlama

Gördüğünüz gibi “EntityValidationErrors” üzerinden validasyonun mesajına erişebiliyoruz.

class Program
{
    static void Main(string[] args)
    {
        OkulDBContext Veri = new OkulDBContext();
        if (!Veri.Database.Exists())
        {
            Veri.Database.Create();
        }
 
        Ogrenci ogrenci = new Ogrenci();
        ogrenci.Adi = "Can";
        Ogrenci ogrenci2 = new Ogrenci();
        ogrenci2.Adi = "Ali";
        Ogrenci ogrenci3 = new Ogrenci();
        ogrenci3.Adi = "Cem";
        Ogrenci ogrenci4 = new Ogrenci();
        ogrenci4.Adi = "abdurrahman uzunkavakaltındayataruyuroğulları";
        Veri.Ogrenciler.Add(ogrenci);
        Veri.Ogrenciler.Add(ogrenci2);
        Veri.Ogrenciler.Add(ogrenci3);
        Veri.Ogrenciler.Add(ogrenci4);
        try
        {
            Veri.SaveChanges();
        }
        catch (Exception ex)
        {
 
        }
 
        Console.Read();
    }
}

Yukarıdaki durumu incelersek eğer sonuç aşağıdaki gibi olacaktır.

Entity Framework - Code First’te IValidatableObject Ä°le Kolonlara Validasyon Ayarlama

Yani demek istediğim o ki, kaç nesnede validasyona takınıldıysa o kadar hata elde edilmekte, bir başka deyişle tüm hatalara ulaşılabilmektedir.

Eğer Validation hatalarını Error almaksızın yakalamak istiyorsanız eğer Context sınıfı üzerinden “GetValidationErrors” metodunu kullanabilirsiniz.

class Program
{
    static void Main(string[] args)
    {
        OkulDBContext Veri = new OkulDBContext();
        if (!Veri.Database.Exists())
        {
            Veri.Database.Create();
        }
 
        Ogrenci ogrenci = new Ogrenci();
        ogrenci.Adi = "Can";
 
        Veri.Ogrenciler.Add(ogrenci);
 
        var Hatalar = Veri.GetValidationErrors();
        if (!Hatalar.Any())
        {
            Veri.SaveChanges(); 
        }
 
 
        Console.Read();
    }
}

Tabi örnektede yaptığım gibi eğer “GetValidationErrors” metodu sonucunda hata verileri geliyorsa “SaveChanges” metodunu devreye sokmamız gerekmektedir.

Gençay Yıldız ın tüm makalelerine bu linkten ulaşabilirsiniz. 

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder