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.
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.if(user.Type == 1)
yerine if(user.Type == UserType.Admin)
şeklinde okunabilir kodlar yazabileceğim.