2013-02-04 22 views
9

EF Code First projesiyle çalışıyorum ve her şey yolunda. Basit bir dersim var, müşteri. Müşteri Sınıfımda, şifrelemek istediğim bir alanım var (Evet, DB düzeyinde şifreleyebileceğimi biliyorum, ancak Alan/Kod düzeyinde şifrelemeyi zorunlu kıldım), bu yüzden aşağıdaki gibi bir şey yapabileceğimi umuyorum:Varlık Çerçeve Kodu İlk olarak, izinsiz ayarlayıcı mı yoksa alıcı mı?

public class Customer 
{ 
    public int CustomerID { get; set; }  
    public string FieldToEncrypt { get; set { _FieldToEncrypt = MyEncryptionFunction.Encrypt(); } } 
} 

Ancak, ayarlayıcı bir tanım varsa şemayı oluştururken, varlık çerçevesi kodu olan özellik göz ardı edebilir varsayalım. Yani sorum şu ki, EF Code First'i getters/setters ile yapmanın bir yolu var mı, yoksa bu işlevi bir kurucuya taşımalı mıyım? İçerik kaydedildiğinde gerçekleşen yöntemlerden/olaylardan birini geçersiz kılmalı mıyım?

DÜZENLEME * ** * ** * ** * ** ** * **** Bir not olarak

, ben kullanıyorum * Verileri bir OData protokol hizmeti üzerinden iletmek için DataService. Bu otomatik olarak ekleme/güncelleme/seçme yöntemlerini üretir. Önerilerin bazıları ikinci bir özellik oluşturmayı gerektirir, ancak DataService sınıfı NotMapped özelliklerinden geçmiyor gibi görünmektedir. Bu, daha önceki soruma birazcık çarpıştı.

+0

Bir dizede şifreleme yapıyorsanız, girişe mümkün olduğunca yakın yerleştirmenizi öneririm. Yani, FieldToEncrypt = "asdf"; '(şifreleme, setterde işlenir), 'FieldToEncrypt = MyEncryptionFunction.Encrypt (" asdf ") olarak değiştirin;' –

+2

Denediniz mi? SO üzerinde, aradığınız şekilde kutudan çıktığı izlenimini veren bir dizi benzer cevap var. Http://stackoverflow.com/questions/11962532/what-does-entityframework-code-first-do-with-property-getters-setters ve http://stackoverflow.com/questions/8990319/have-a-custom adresine bakın. ef-code-first-model-varlık için -setter-özellik- – Zeph

+0

Sağladığınız ikinci bağlantı ihtiyacım olana daha yakın görünüyor. Ancak, alanı 'haritalama' hakkında konuşuyor. Hala alanın haritalanmasını istiyorum. Değer veritabanında kalmadan önce eşlenen değerin dönüştürülmesini istiyorum. Daha derin bir sorum var, yani: EF Kod İlk'de, kod, yerleştirmeden önce/sonra alıcıları ve ayarlayıcıları çağırıyor mu? – Richthofen

cevap

4
public class Customer 
{ 
    public int CustomerID { get; set; }   
    public string EncryptedField { get; private set; } 

    [NotMapped] 
    public string Field 
    { 
     get { return MyEncryptionFunction.Decrypt(EncryptedField); } 
     set { EncryptedField = MyEncryptionFunction.Encrypt(value); } 
    } 
} 
+0

Tamam, ama zihinsel olarak GET vs SET'ü çalıştırmaya çalışıyorum. Entity Framework veriyi veri tabanına yazmayı denediğinde, nesneye 'GET' deniyor mu? Öyleyse, veritabanındaki veriler şifresi çözülecek ve daha sonra veritabanına eklenecektir. Bu örnekte, verinin sadece bellekte şifrelenmiş ve kalıcı olduğunda değil endişeleniyorum. SET deyimini denedim ve şaşırtıcı bir şekilde tam olarak istediğim gibi çalıştı. 'NotMapped' açıklaması ne sağlar? Çerçeveyi db'deki * sütunu * kalıcı hale getirmemesini söyler mi? eğer öyleyse, benim örneğim için işe yaramazdı. – Richthofen

+0

Bu örnekte veritabanında yalnızca iki sütun olacak: CustomerID ve EncryptedField (şifreli alan değeriyle birlikte). Şifreli veriler hiçbir yerde saklanmaz - ne veritabanında ne de bellekte. 'NotMapped' ek açıklaması EF'in mülkleri atlamasını ve bu özellik için veritabanında sütun oluşturmamasını söyler –

+0

Tamam. Fakat bunu iki alana ayırmak yerine, bir tane eşlenmemiş ve bir tane haritalanmış, bunu sadece bir alanla yapabilir miyim, haritalanmış mı? Veritabanından mülkünüze veri okunurken – Richthofen

İlgili konular