Son Haberler
Anasayfa / ENTITY FRAMEWORK / Entity framework Enum Kullanımı

Entity framework Enum Kullanımı

Entityframework’un benim için en güzel özelliklerinden biri sayısal bir değerin enum değeri ile eşleştirilip bana enum türünde veriyor olmasıdır.  Veritabanında sayısal olan alanlar için C# tarafında ilgili sınıfın özelliğinin tiplerine enum olarak ürettiğiniz nesneyi verirseniz EntityFramework Convert işlemini sayısal işlemden Enum’a kendisi yapacaktır.

 

Type kullanıcı türünü sayısal olarak tabloda tutan bir alandır ve bu alana geçilen değerlerin karşılıklarının UserType adlı tablodaki kayıtlara denk geldiğini düşünelim.

Normalde CodeFirst ve DbFirst ile EntityFramework kullanan kişilerin C# tarafında Type kolonları için tinyint ise byte int ise int gibi direkt sayısal alan tipi kullanımlarını görüyoruz fakat hem okunabilirlik hemde kod kalitesi açısından Enum’lar ile çalışmak daha sağlıklı olacaktır.

User ve UserType tablosunda alttaki gibi kayıtlarımız olduğunu varsayalım.

User Tablosu

Id Name Type
1 Murat BEKLER 1
2 Ali Veli 2

UserType Tablosu

Id Name
1 Admin
2 User

Üstteki tablolarda görüldüğü üzere Murat ÖNER ve Sakine ÖNER adında 2 kullanıcımız var ve Murat ÖNER 1 UserType’ına yani Admin UserType’ına sahip Sakine ÖNER’in ise User olduğunu görüyoruz. Bu durumda benim User tablosu için EntityFramework tarafında alttaki gibi bir Entity sınıfım varsa o zaman entity sorgusundan bana direkt olarak 1 ve 2 diye int değer dönecek.

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public byte Type { get; set; }
}
Tabloyu oluşturduğunuz aşamada geliştirme işlemini yapıyorsanız 1’e Admin ve 2’ye User kullanıcı türünün karşılık geldiğini o an bilebilirsiniz ama aradan belli bir süre geçtikten sonra tekrar aynı kod bloklarınıza döndüğünüzde kod blokları arasında if(user.Type == 1) gibi v.b. kod blokları ile karşılaştığınız 1 neydi demeniz yüksek derecede olası bir durumdur işte bu durumun önüne geçmek için alttaki gibi bir UserType adında bir Enum oluşturuyorum ve User sınıfının Type özelliğine byte yerine UserType Enum’ını veriyorum.
public enum UserType : byte
{
    Admin = 1,
    User
}
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public UserType Type { get; set; }
}
Gördüğünüz gibi UserType adlı enum’ı byte tipinden kalıtım alarak oluşturduk enum’ların varsayılan olarak kalıtım aldıkları sayısal tip int tipidir o yüzden tablodaki alan tipinize göre bu kısmı düzeltmelisiniz. Enum oluşturma sonrası User tablosundaki Type alanına UserType enum’ını özellik tipi olarak geçtim böylelikle if(user.Type == 1) yerine if(user.Type == UserType.Admin) şeklinde okunabilir kodlar yazabileceğim.