2012-04-06 14 views
9

मैं ईएफ के साथ अपना पहला प्रोजेक्ट कर रहा हूं और मैं कोड-प्रथम मॉडल जाने की योजना बना रहा हूं। मैं एक काफी क्लासिक "लुकअप टेबल" परिदृश्य को संभालने के बारे में थोड़ा सा मार्गदर्शन खोजने की कोशिश कर रहा हूं।ईएफ कोड में लुकअप टेबल्स के लिए सर्वोत्तम अभ्यास- पहले

मैं एक सुंदर कैनोलिक स्थिति से निपट रहा हूं जहां मैं पता डेटा जारी रखूंगा। तो, मैं एक साधारण पता डीटीओ ...

public class Address 
    { 
     public int Id { get; set; } 
     public virtual string StreetAddress1 { get; set; } 
     public virtual string StreetAddress2 { get; set; } 
     public virtual string City { get; set; } 
     public virtual string State { get; set; } 
     public virtual string ZipCode { get; set; } 
    } 

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

मैं इस राज्य लुकअप टेबल का उपयोग पॉप्युलेट और राज्य ड्रॉप-डाउन स्टाइल बॉक्स आदि के लिए करने की उम्मीद करता हूं और पता इकाई में दायर राज्य के सत्यापन के रूप में भी कार्य करता हूं। काफी आम सामान। तो, मेरे पास कुछ सरल (मुझे आशा है) प्रश्न हैं।

  1. मैं एफई तालिका बनाने की है बस को राज्य इकाई का प्रतिनिधित्व करने के लिए एक इकाई बनाने की जरूरत है, या मैं सिर्फ एक DBCreation रणनीति में तालिका बनाने प्रक्रिया में शामिल है और वहाँ यह बीज कर सकते हैं?
  2. यह है कि इकाई बनाने के लिए फ़ायदेमंद होगा, बस किसी भी जगह है जहाँ मैं एक "राज्य पिकर"
  3. मैं वास्तव में केवल दो अक्षर का राज्य कोड संग्रहीत करना चाहते हैं प्रदर्शित करना चाहते हैं के लिए के रूप में "दृश्य मॉडल" का उपयोग करने पता इकाई में, लेकिन क्या यह समझ में आता है या क्या यह पर अधिक समझ में आता है इसे एक राज्य इकाई के लिए एक नेविगेशन गुण बनाते हैं और फिर प्रदर्शित करते हैं?

मैंने यहां अपने बिंदु को व्यक्त करने के साथ थोड़ा संघर्ष किया, इसलिए यदि मैं स्पष्ट नहीं हूं, तो अधिक जानकारी के लिए पूछने के लिए स्वतंत्र महसूस करें।

अग्रिम धन्यवाद। UI में उचित रूप से ?

+0

3- मैं व्यक्तिगत रूप से इसके लिए एक इकाई का उपयोग करता हूं क्योंकि यह उपयोगकर्ताओं की टाइपोग्राफ़िक त्रुटियों से बच सकता है। यदि आप कई संस्थाओं (अब या बाद में) में इसका उपयोग करते हैं तो मैं स्थिरता सुनिश्चित करता हूं। लेकिन यदि आपका आवेदन काफी छोटा है या आपको बहुत अधिक सत्यापन की आवश्यकता नहीं है, तो मुझे सीधे आपके पता इकाई में दो अक्षरों को सीधे रखने के लिए बहुत अधिक संकेत नहीं दिखता है। – Mathieu

उत्तर

7
  1. मैं राज्य यह ही वर्ग है और पता की एक नेविगेशन संपत्ति होगा।
public class Address 
{ 
    public int Id { get; set; } 
    public virtual string StreetAddress1 { get; set; } 
    public virtual string StreetAddress2 { get; set; } 
    public virtual string City { get; set; } 
    public virtual USState State { get; set; } 
    public virtual string ZipCode { get; set; } 
} 

public class USState 
{ 
    public int Id { get; set; } 
    public string Code { get; set; } 
    public string Text { get; set; } 
} 

कोड के साथ पहले एफई तालिका बनाने होंगे, पर आप Seed() विधि में पॉप्युलेट कर सकते हैं।

  1. आपको दृश्य मॉडल का उपयोग करने की आवश्यकता नहीं है, लेकिन एक संपादन फ़ॉर्म में राज्यों को प्रदर्शित करने के लिए साझा दृश्य का उपयोग करना समझ में आता है। आप MVC का उल्लेख नहीं है, लेकिन अगर आप का उपयोग करें, तो यह आपके POCO या दृश्य मॉडल में
[UIHint("StatePicker")] 
public virtual USState State { get; set; } 

डाल के रूप में सरल है - आपके विचार का उपयोग करता है, उसके आधार पर। फिर दृश्य में/साझा/EditorTemplates, एक आंशिक दृश्य StatePicker.cshtml, जो

@Html.EditorFor(m => m.State) 
अपने ध्यान में रखते हुए

के साथ संयोजन में की तरह

@inherits System.Web.Mvc.WebViewPage<USState> 
@Html.DropDownListFor(m => m, new SelectList((IEnumerable<USState>)ViewBag.USStatesAll, 
    "Id", 
    "Name", 
    Model==null?1:Model.Id), 
    "Choose--") 

कुछ looke होगा जोड़ें।

  1. नेविगेशन संपत्ति। आपका डीबी यूएसस्टेट आईडी को एक विदेशी कुंजी के रूप में संग्रहीत करेगा, लेकिन आपकी ऐप आवश्यकता के आधार पर addr.State.Code या addr.State.Text का उपयोग कर सकती है। यह बहुत अधिक लचीला है।
+0

क्या होगा यदि आप ViewModels का उपयोग कर रहे हैं? मैंने ऊपर के दृष्टिकोण की कोशिश की है और यह काम नहीं कर रहा है? मैं ऑब्जेक्ट पर आईडी और लुकअप इकाई के बीच कैसे मैप करूं? – Burt

+0

@ बर्ट ऊपर मेरा उदाहरण पूरा नहीं हुआ है, लेकिन तकनीक एक व्यूमोडेल या सीधे मॉडल का उपयोग करने के लिए काम करेगी। पहले ईएफ कोड के साथ, ढांचा आपके लिए मैपिंग करता है। मैं अच्छा (और अधिक हालिया) ईएफ और एमवीसी के लिए परिचय पाया जा सकता है [यहां] (http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity -framework-डेटा-मॉडल के लिए एक-एएसपी निवल MVC-आवेदन) –

1
  1. हाँ तुम सिर्फ मूल स्क्रिप्ट का विस्तार एक नया DBCreation स्क्रिप्ट बना सकते हैं और जो इकाई की रूपरेखा के साथ कोई संबंध नहीं एक राज्य टेबल बना सकते हैं।

  2. यदि मैं आप थे तो मैं राज्य इकाई बनाउंगा। यदि राज्य इकाई नहीं बनाई गई है, तो अंत में आपको इसे कोड में बनाना होगा, लेकिन इस इकाई को पॉप्युलेट करना एक समस्या होगी, आपको एसक्यूएल का उपयोग करने की आवश्यकता होगी (आप इस डेटा को एक्सएमएल में स्टोर कर सकते हैं जो स्टोर करने से बेहतर विकल्प लगता है एसक्यूएल)।

  3. यदि आप डेटाबेस में तालिका को स्टोर करने का निर्णय लेते हैं और इसे एक इकाई बनाकर सीधे इसका उपयोग करते हैं, तो इसे एक नेविगेशन प्रॉपर्टी बनाना एक बेहतर विकल्प है क्योंकि आप आलसी लोडिंग या इसे शामिल करके उत्सुक लोडिंग के दौरान इसका उपयोग कर सकते हैं।

संबंधित मुद्दे