2011-02-15 5 views
10

हम पहले ईएफ कोड का उपयोग कर रहे हैं, और हमारे बिक्री डेटाबेस के लिए डेटा संदर्भ है। इसके अतिरिक्त, हमारे पास एक वर्ग है जो हमारे डेटा संदर्भ के शीर्ष पर बैठता है और कुछ बुनियादी सीआरयूडी संचालन करता है।मॉकिंग DbContext.Set <T>()?

public static T Create<T>(int userId, T entity) where T : class, IAllowCreate 
{ 
    if (entity == null) 
     throw new ArgumentNullException("entity"); 

    using (SalesContext dc = new SalesContext()) 
    { 
     dc.Set<T>().Add(entity); 
     dc.SaveChanges(); 

     return entity; 
    } 
} 

मैं an example of पाया कैसे नकली संदर्भों और IDBset गुण पैदा करने के लिए:

उदाहरण के लिए, हम निम्न कार्य हो। मैंने इसे लागू करना शुरू कर दिया, लेकिन मैं एक मुद्दे पर भाग गया।

हम अपने कोड में डीसीएससेट() ऊपर उदार रूप से (जैसा ऊपर देखा गया) का उपयोग करते हैं, क्योंकि हम जेनेरिक सीआरयूडी विधियों को बनाने का प्रयास करते हैं। रीड कस्टमर, रीडकंटैक्ट इत्यादि रखने के बजाय, हम केवल पढ़ेंगे()। हालांकि, डीसीएससेट एक डीबीसेट देता है, आईडीबीसेट नहीं, इसलिए मैं इसे नकल करने में सक्षम नहीं हूं।

क्या कोई भी नकली या नकली डीबीकॉन्टेक्स्ट करने में सक्षम है और अभी भी सेट कार्यक्षमता का उपयोग कर रहा है?

उत्तर

11
interface ISalesContext 
{ 
    IDbSet<T> GetIDbSet<T>(); 
} 

class SalesContext : DbContext, ISalesContext 
{ 
    public IDbSet<T> GetIDbSet<T>() 
    { 
     return Set<T>(); 
    } 
} 

मैं एक अलग नाम का इस्तेमाल किया है, लेकिन अगर आप नियमित रूप से कार्यान्वयन को छिपाने के लिए पसंद करते हैं आप new ऑपरेटर का उपयोग कर सकते हैं।

+0

मैंने उस सड़क को शुरू कर दिया और इसे बहुत जल्दी छोड़ दिया। अंत में मुझे एक GetNonTrackedDbSet() भी जोड़ना पड़ा। – taylonr

+0

हालांकि यह केवल एक बार बात है। बस इसे एक सार डीबीकॉन्टेक्स्ट के रूप में सार करें जिसे आप बाद में पुन: उपयोग कर सकते हैं। –