2011-02-17 11 views
55

मेरे अन्य question about mocking DbContext.Set की ऊँची एड़ी के बाद मुझे ईएफ कोड फर्स्ट करने के बारे में एक और सवाल है।DbEntityEntry को मजाक या फिक्र करना या एक नया DbEntityEntry

if (entity == null) 
    throw new ArgumentNullException("entity"); 

Context.GetIDbSet<T>().Attach(entity); 
Context.Entry(entity).State = EntityState.Modified; 
Context.CommitChanges(); 

return entity; 

प्रसंग मेरे अपने DbContext की एक अंतरफलक है:

मैं अब कि लगता है कि मेरी अद्यतन के लिए एक विधि है।

समस्या मैं करने के लिए है में चल रहा हूँ

, मैं

Context.Entry(entity).State कैसे संभाल करते।

मैंने इस कोड के माध्यम से कदम बढ़ाया है और यह तब काम करता है जब मेरे पास मेरे संदर्भ इंटरफ़ेस के कार्यान्वयन के रूप में वास्तविक लाइव डीबीकॉन्टेक्स्ट होता है। लेकिन जब मैंने अपना नकली संदर्भ वहां रखा, तो मुझे नहीं पता कि इसे कैसे संभालना है।

डीबीईएनटीटीएन्ट्री क्लास के लिए कोई कन्स्ट्रक्टर नहीं है, इसलिए मैं अपने नकली संदर्भ में केवल एक नया नहीं बना सकता।

क्या किसी को भी आपके कोडफर्स्ट समाधान में डीबीएनटीटीएन्ट्री को मजाक करने या फिक्र करने के साथ कोई सफलता मिली है?

या राज्य परिवर्तनों को संभालने का एक बेहतर तरीका है?

interface ISalesContext 
{ 
    IDbSet<T> GetIDbSet<T>(); 
    void SetModified(object entity) 
} 

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

    public void SetModified(object entity) 
    { 
     Entry(entity).State = EntityState.Modified; 
    } 
} 

तो, बजाय कार्यान्वयन को बुलाने की, तो आप सिर्फ SetModified फोन:

उत्तर

83

बस अन्य मामले की तरह, तुम क्या जरूरत है अविवेक का एक अतिरिक्त स्तर जोड़ने के लिए है।

+0

धन्यवाद ... जब मुझे आवश्यकता नहीं है, तो मुझे "एंट्री मॉक कैसे करें" सोचने में फंस गया, मुझे बस संशोधित कार्यक्षमता का नकल करने की ज़रूरत है ... मैं लगभग शर्मिंदा हूं कि यह अब इतना स्पष्ट है। – taylonr

+10

मत बनो - डेवलपर्स के रूप में हमारे जीवन "duh!" से भरे हुए हैं क्षण :-) –

+4

+9000 मैंने एक घंटे का शोध किया कि आंतरिक सीटीआर और आंतरिक कक्षाओं के साथ कक्षाओं का नकल कैसे करें। मैं हर मोड़ पर थका हुआ था और समाधान इतना आसान है! पूछताछ करने वाले और उत्तर देने वाले –

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