2008-11-15 7 views
12

मेरे पास कई उपयोगकर्ता अनुमतियां हैं जिनका परीक्षण मेरे एएसपी.NET एप्लिकेशन में किया जाता है। ये अनुमति मूल्यों एक Enum में संदर्भित ताकि मैं तो जैसे आसानी से परीक्षण अनुमतियाँ:कोड में एनम मानों और डेटाबेस में संबंधित मानों के बीच निर्भरताओं से कैसे बचें?

  • btnCreate.Enabled = PermissionManager.TestPermission (Permission.AllowCreate);

हालांकि, मेरे पास डेटाबेस में इन अनुमतियों को भी संग्रहीत किया गया है क्योंकि मुझे उनके आईडी की तुलना में उनके बारे में अधिक जानकारी रखने की आवश्यकता है। लेकिन यह enum मूल्यों और डेटाबेस में उन लोगों के बीच एक भयानक निर्भरता बनाता है, जो किसी भी बीमार माना जाता है और मुझे अपने पूरे आवेदन में समस्याएं हैं। क्या इस मुद्दे के आसपास कोई बेहतर तरीका है? क्या किसी ने इससे पहले निपटाया है?

उत्तर

1

मुझे नहीं पता कि सबसे अच्छा समाधान क्या है, मैं इसे सुनना चाहता हूं। हमारा समाधान स्पष्ट रूप से की तरह

public enum MyEnum : int 
{ 
    None =0, 
    Value = 1, 
    AnotherValue =2 
} 

enum प्रकार और डेटाबेस के लिए पूर्णांक मान को बचाने के लिए है। उदाहरण के लिए जब मान 1 हटा दिया जाता है, तो आप अभी भी गणना का उपयोग करने में सक्षम होंगे और अन्यवैल्यू में अभी भी डेटाबेस में मान 2 है।

+0

मैं भी यही करता हूं, लेकिन अगर आपको कोड में संग्रहीत पूर्णांक या डेटाबेस को दूसरे अपडेट किए बिना बदला जाता है तो आपको अभी भी समस्याएं हैं। –

1

या शायद डीबी में स्ट्रिंग के रूप में enumvalues ​​स्टोर करें। तार();

0

हम एक छोटे से एप्लिकेशन का उपयोग करते हैं जो डेटाबेस से एनम कोड (उदाहरण: NorthwindEnums.cs) उत्पन्न करता है। जब भी डेटाबेस बदलता है हम इसे चलाने और प्रभावित पुस्तकालयों को अद्यतन करने के लिए सुनिश्चित करते हैं।

हम सी # में वेब सेवा संदर्भों के मुद्दों से बचने के लिए हमारे enums को 0 से शुरू करने और अनुक्रमिक रखने की भी कोशिश करते हैं।

1

enum मानों का उपयोग करना जब तक आप कभी नहीं पहले से ही सौंपा मूल्यों को बदल के रूप में करने के लिए स्वीकार्य है। यदि आप .NET में मानक भूमिका-आधारित प्रमाणीकरण का उपयोग कर रहे थे तो भी आप डेटाबेस में संबंधित भूमिका तालिका में कुछ टेक्स्ट स्ट्रिंग्स के exisistence पर निर्भर रहेंगे।

0

कुछ समय पहले मैंने अपनी कंपनी के लिए ऐसा करने के लिए एक छोटा सा टूल बनाया था जो डेटाबेस में तालिका के साथ "सिंक्रनाइज़ेशन" की अनुमति देने के लिए enum फ़ील्ड पर विशेषताओं का उपयोग करेगा।

उपकरण एक असेंबली स्कैन कर सकता है और उपयुक्त INSERT/UPDATE SQL कमांड जेनरेट करेगा जो कोड में enum परिभाषा के साथ डेटाबेस को सिंक करेगा।

0

मैं किसी भी तालिका पर विस्तारित संपत्ति जोड़ता हूं जिसे मुझे कोड में प्रवेश के रूप में एक्सेस करने की आवश्यकता होगी। मैं फिर इस संपत्ति के साथ किसी भी तालिका को देखकर मेरे लिए अपने सभी enum उत्पन्न करने के लिए कोड पीढ़ी सॉफ्टवेयर (कोडमिथ, टी 4, जो कुछ भी) का उपयोग करें। इसके लिए उपयोग की जाने वाली कोई भी तालिका कुछ मूलभूत नियमों (एक नाम कॉलम इत्यादि होना चाहिए) के आधार पर है, इसलिए कोड जेनरेटर जानता है कि कौन सा कॉलम एनम के तत्वों के नाम के रूप में उपयोग करना है।

एक बार उन तालिकाओं में मूल्य जोड़े जाने के बाद हम निर्माण को तोड़ने से बचने के लिए उन्हें कभी भी परिवर्तित नहीं करते हैं।