2013-08-29 13 views
6

मेरी इंटर्नशिप के लिए मैं एक प्रोग्राम बना रहा हूं जो पृष्ठभूमि पर डेटाबेस के साथ संचार करता है। कार्यक्रम एमवीसी (मॉडल-व्यू-कंट्रोलर) तरीके से स्तरित है।ऑब्जेक्ट ओरिएंटेड लिंक्स 2 एसक्यूएल क्वेरी क्लास

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

enter image description here

समस्या मैं अब मेरी पढ़ें समारोह में क्वेरी निष्पादित करने के लिए कैसे है।

public class DataAccesLayer 
{ 
    private Queries queryloader; 
    private RoadsoftDigitacV8DataContext db; 

    public DataAccesLayer() 
    { 
     queryloader = new Queries(); 
     db = new RoadsoftDigitacV8DataContext(); 
    } 

    public List Read(int ID) 
    { 
     IQueryable query; 
     query = queryloader.GetQuery(ID); 

     return query.ToList(); 

    } 

} 

प्रश्नों वर्ग के लिए कोड::

public class Queries 
{ 
    private Dictionary<int, IQueryable object> queryDict; 
    private ErrorLoggerWinLog logger; 

    public Queries() 
    { 
     logger = ErrorLoggerWinLog.Instance(); 
     queryDict = new Dictionary<int, IQueryable object>(); 
     queryDict.Add(1, from d in db.Drivers 
         select d); 
    } 

    public object GetQuery(int ID) 
    { 
     var query; 
     if(queryDict.TryGetValue(ID, out query) == false) 
     { 
      logger.WriteLine("Queries", "Could not find the query specified", ErrorLoggerWinLog.loggerlevel.Error); 
     } 
     return query; 
    } 
} 

मैं सोच रहा हूँ, यह संभव है दाल के लिए कोड पीछा कर रहा है? अभी यह काम नहीं लग रहा है। मैं शायद कुछ भूल रहा हूं या कुछ महत्वपूर्ण याद कर रहा हूं। क्या किसी को इस तरह के सेट-अप के साथ कोई अनुभव है, या एक पूरी तरह से अलग समाधान को देखना चाहिए?

संपादित करें: अभी यह क्वेरी निष्पादित नहीं प्रतीत होता है, जैसे कि मैं फ़ंक्शन फ़ंक्शन में कमांड खो रहा हूं। हालांकि डेटाैकेंटेक्स्ट भरा हुआ है, यह प्रोग्राम के एक अलग सेक्शन में किया जा रहा है।

संपादित 2: अभी मैं आईरिपोजिटरी पैटर्न में देख रहा हूं, यह एक महान सीखने का अनुभव है, उन सभी को धन्यवाद जिन्होंने टिप्पणी करने और टिप्पणी करने के लिए समय लिया!

+0

अच्छा प्रयास, चित्र के लिए +1 =] – Sean

+0

हालांकि ..... वास्तव में क्या काम नहीं कर रहा है? – Sean

+0

आपको अभी भी डीबी संदर्भ वस्तु को वास्तविक डेटाबेस से कनेक्ट करने की आवश्यकता होगी। जैसा कि आपके पास है, आपके पास एक असंबंधित संदर्भ है। फिर आपको संदर्भ के माध्यम से वास्तव में क्वेरी निष्पादित करने की आवश्यकता होगी। – ThaMe90

उत्तर

3

किसी भी समय आपके queryDict में केवल एक तत्व है; एकमात्र समय GetQuery() कोई त्रुटि संदेश लॉग नहीं करता है औरशून्य वापस नहीं आता है जब आप इसे 1 पास करते हैं। परिणामस्वरूप Read(1) सभी ड्राइवर्स की एक सूची देता है, अन्यथा NullReferenceException फेंकता है क्योंकि, query शून्य है।

public class DriversDAL 
    { 
     private RoadsoftDigitacV8DataContext db; 

     public DriversDAL() 
     { 
      db = new RoadsoftDigitacV8DataContext(); 
     } 

     public Driver GetDriver(int ID) 
     { 
      return db.Drives.Single(d => d.ID == ID); 
     } 

    } 

आप एक सामान्य समाधान चाहते हैं, तो आप एक सामान्य दाव और भंडार पैटर्न का उपयोग करना चाहिए:

आप कुछ इस तरह का उपयोग करना चाहिए सवाल के साथ

How To Create Generic Data Access Object (DAO) CRUD Methods with LINQ to SQL

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