2013-02-04 13 views
9

मैं एक ईएफ कोड प्रथम परियोजना के साथ काम कर रहा हूं, और सब ठीक है। मेरे पास एक साधारण कक्षा, ग्राहक है। मेरे ग्राहक वर्ग में मेरे पास एक फ़ील्ड है जिसे मैं एन्क्रिप्ट करना चाहता हूं (हां, मुझे पता है कि मैं डीबी स्तर पर एन्क्रिप्ट कर सकता हूं लेकिन आवश्यकताएं निर्देशित करती हैं कि मैं डोमेन/कोड स्तर पर एन्क्रिप्ट करता हूं), इसलिए मुझे आशा है कि मैं निम्न की तरह कुछ कर सकता हूं:इकाई फ्रेमवर्क कोड पहले, nonempty सेटर या गेटर?

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

हालांकि, मुझे लगता है कि अगर सेटर एक परिभाषा है, इकाई की रूपरेखा कोड पहले कि संपत्ति जब स्कीमा पैदा अनदेखा कर सकते हैं। तो मेरा सवाल यह है कि क्या ईएफ कोड पहले प्रदान किए गए गेटर्स/सेटर्स के साथ पहला तरीका है, या क्या मुझे इस कार्यक्षमता को कन्स्ट्रक्टर में ले जाना चाहिए? क्या मुझे किसी विधि/घटनाओं को ओवरराइड करना चाहिए जो कॉन्टेक्स्ट सहेजने पर होता है, इसके बजाय?

संपादित * ** * ** * ** * ** * ** * ****

एक नोट के रूप में, मैं उपयोग कर रहा हूँ ओडाटा प्रोटोकॉल सेवा पर डेटा संचारित करने के लिए डेटा सेवा। यह स्वचालित रूप से सम्मिलित/अद्यतन/चयन विधियों को उत्पन्न करता है। कुछ सुझावों को दूसरी संपत्ति बनाने की आवश्यकता है, लेकिन डेटा सेवा क्लास नोटमैप किए गए गुणों से गुज़रने लगती नहीं है। यह मेरे पिछले प्रश्न में एक कंक का थोड़ा सा फेंकता है।

+0

आप एक स्ट्रिंग पर एन्क्रिप्शन कर रहे हैं, मैं इसे संभव के रूप में इनपुट के करीब के रूप में डाल सुझाव देना चाहेंगे। यानी, जहां आप 'FieldToEncrypt =" asdf "करते हैं;' (एन्क्रिप्शन में सेट किया गया एन्क्रिप्शन), 'FieldToEncrypt = MyEncryptionFunction.Encrypt ("asdf") में बदलें; ' –

+2

क्या आपने इसे आजमाया है? एसओ पर कई समान उत्तर हैं जो सुझाव देते हैं कि यह उस बॉक्स से बाहर काम करता है जिस तरह से आप खोज रहे हैं। Http://stackoverflow.com/questions/11962532/what-does-entityframework-code-first-do-with-property-getters-setters और http://stackoverflow.com/questions/8990319/have-a- कस्टम -set-on-property-for-ef-code-first-model-entity – Zeph

+0

आपके द्वारा प्रदान किया गया दूसरा लिंक मुझे जो चाहिए उसे नज़दीक लगता है। हालांकि, वह इस क्षेत्र को 'मानचित्रण नहीं' करने के बारे में बात कर रहा है। मैं चाहता हूं कि क्षेत्र मैप किया जाए, फिर भी। मैं चाहता हूं कि मैप किए गए मान को डेटाबेस में फंस गया जाने से पहले परिवर्तित किया जाए। मुझे लगता है कि मेरे पास एक गहरा सवाल है, और यह है: ईएफ कोड में पहले, क्या कोड डालने से पहले/बाद में गेटर्स और सेटर्स को कॉल करता है? – Richthofen

उत्तर

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

ठीक है, लेकिन मैं मानसिक रूप से जीईटी बनाम सेट करने का प्रयास कर रहा हूं। तो जब इकाई फ्रेमवर्क डेटाबेस को डेटा लिखने का प्रयास करता है, तो क्या यह ऑब्जेक्ट पर 'GET' कहता है? यदि ऐसा है, तो डेटाबेस में डेटा डिक्रिप्ट किया जाएगा और फिर डेटाबेस में डाला जाएगा। इस उदाहरण में, मुझे चिंता है कि डेटा केवल स्मृति में एन्क्रिप्ट किया गया है और जब भी जारी नहीं है। मैंने एसईटी कथन की कोशिश की और यह आश्चर्यजनक रूप से काम किया कि मैं इसे कैसे चाहता था। 'नोटमैपड' एनोटेशन क्या प्रदान करता है? क्या यह ढांचे को बताता है कि * डीबी में कॉलम जारी नहीं है? यदि हां, तो यह मेरे उदाहरण के लिए काम नहीं करेगा। – Richthofen

+0

इस नमूने में आपके पास डेटाबेस में केवल दो कॉलम होंगे: ग्राहक आईडी और एन्क्रिप्टेड फ़ील्ड (एन्क्रिप्टेड फ़ील्ड मान के साथ)। एन्क्रिप्टेड डेटा कहीं भी संग्रहीत नहीं किया जाएगा - न तो डेटाबेस में, न ही स्मृति में। 'NotMapped' एनोटेशन ईएफ को संपत्ति छोड़ने के लिए बताता है और इस संपत्ति के लिए डेटाबेस में कॉलम उत्पन्न नहीं करता –

+0

ठीक है। लेकिन इसे दो क्षेत्रों में विभाजित करने के बजाय, एक अस्वीकृत और एक मैप किया गया, क्या मैं इसे सिर्फ एक फ़ील्ड के साथ कर सकता हूं, मैप किया? – Richthofen