दिलचस्प पोस्ट
जावा में अपेक्षाकृत बड़ी बाइट-फाइल पढ़ने का सबसे तेज़ तरीका क्या मैं हमेशा एंडएस्लो और ओरेएस ऑपरेटर्स का उपयोग करूँ? क्या मैं मॉलक पर नल पर भरोसा कर सकता हूं? मैं किसी संरक्षित सदस्य को व्युत्पन्न वर्ग के एक उदाहरण से क्यों नहीं एक्सेस कर सकता हूं? एकाधिक अपाचे सर्वर पर एक एकल PHP5 सत्र का प्रबंधन कैसे करें? आवाज मान्यता कुछ सेकंड के बाद सुनने बंद हो जाता है कैसे टंकिनर में घटना हैंडलर के लिए एक तर्क को पारित करने के लिए? कुकी वाईआईएस सेट करें, पीएचपी समस्या से पढ़ें स्प्रिंग में ऑटोचेयरिंग कैसे काम करता है? निश्चित हेडर और एक निश्चित कॉलम के साथ HTML तालिका? Google मानचित्र को सरल मार्कर क्लस्टरर जोड़ना आरटीटीआई कितना महंगा है? विंडोज़ फाइलसिस्टम: एक फ़ाइल का निर्माण समय बदलता नहीं है, जब वह हटाया जाता है और फिर से बनाया जाता है जावा के लिए फास्ट ट्रांसएंडेंड / त्रिकोणमितीय फ़ंक्शन मास्टर शाखा को गिट में कैसे बदलना है, पूरी तरह से किसी अन्य शाखा से?

AsNoTracking () के लिए वैश्विक सेटिंग?

मूल रूप से मुझे विश्वास है कि

context.Configuration.AutoDetectChangesEnabled = false; 

परिवर्तन ट्रैकिंग को अक्षम करेगा लेकिन नहीं। वर्तमान में मुझे अपने सभी AsNoTracking() प्रश्नों पर AsNoTracking() का उपयोग करने की आवश्यकता है (मेरी रीड ओनली लेयर के लिए) क्या DbContext पर ट्रैकिंग अक्षम करने के लिए एक वैश्विक सेटिंग है?

Solutions Collecting From Web of "AsNoTracking () के लिए वैश्विक सेटिंग?"

चूंकि इस प्रश्न को विशिष्ट ईएफ संस्करण के साथ टैग नहीं किया गया है, मैं यह उल्लेख करना चाहता हूं कि ईएफ कोर में व्यवहार को संदर्भ स्तर पर कॉन्फ़िगर किया जा सकता है ।

आप प्रसंग इंस्टेंस लेवल पर डिफ़ॉल्ट ट्रैकिंग व्यवहार भी बदल सकते हैं:

 using (var context = new BloggingContext()) { context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; var blogs = context.Blogs.ToList(); } 

आपके व्युत्पन्न संदर्भों पर इस तरह की विधि को उजागर करने के बारे में और प्रश्नों के लिए इसका उपयोग करें:

 public IQueryable<T> GetQuery<T>() where T : class { return this.Set<T>().AsNoTracking(); } 

AsNoTracking स्थापना वैश्विक रूप से संभव नहीं है। आपको प्रत्येक क्वेरी के अनुसार या प्रति प्रत्येक ObjectSet ( DbSet नहीं) को सेट करना चाहिए। बाद के दृष्टिकोण को ObjectContext एपीआई का उपयोग करने की आवश्यकता है।

 var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; var set = objectContext.CreateObjectSet<T>(); set.MergeOption = MergeOption.NoTracking; // And use set for queries 

आप अपने डीबीसीटेन्टेक्स में ऐसा कुछ कर सकते हैं:

 public void ObjectContext_OnObjectMaterialized(Object objSender, ObjectMaterializedEventArgs e) { Entry(e.Entity).State = EntityState.Detached; } 

हर बार जब कोई ऑब्जेक्ट आपके संदर्भ से भौतिक हो जाता है, तो यह अलग हो जाएगा और अब ट्रैक नहीं किया जाएगा।

अद्यतन: यह वास्तव में काम नहीं किया। टिप्पणी देखो!

जब मैं StackOverflow पर खोज करता हूं और इसका जवाब है, तो मुझे इससे नफरत है: "आप नहीं कर सकते!" या "आप कर सकते हैं, लेकिन तभी आप पूरी तरह से हर एक कॉल को बदलते हैं जिसे आपने कभी बनाया है।"

प्रतिबिंब किसी को? मैं उम्मीद कर रहा था कि यह एक DbContext सेटिंग होगा। लेकिन जब से यह नहीं है, मैंने प्रतिबिंब का उपयोग करके एक बनाया है।

यह आसान छोटी विधि सभी DBSet प्रकार के गुणों पर AsNoTracking सेट कर देगा।

  private void GloballySetAsNoTracking() { var dbSetProperties = GetType().GetProperties(); foreach (PropertyInfo pi in dbSetProperties) { var obj = pi.GetValue(this, null); if (obj.GetType().IsGenericType && obj.GetType().GetGenericTypeDefinition() == typeof(DbSet<>)) { var mi = obj.GetType().GetMethod("AsNoTracking"); mi.Invoke(obj, null); } } } 

इसे एक अतिभारित DbContext कन्स्ट्रक्टर में जोड़ें।

  public ActivationDbContext(bool proxyCreationEnabled, bool lazyLoadingEnabled = true, bool asNoTracking = true) { Configuration.ProxyCreationEnabled = proxyCreationEnabled; Configuration.LazyLoadingEnabled = lazyLoadingEnabled; if (asNoTracking) GloballySetAsNoTracking(); } 

यह प्रतिबिंब का उपयोग करता है, जिसका अर्थ है कि कोई व्यक्ति तुरंत टिप्पणी करेगा कि यह एक प्रदर्शन हिट है लेकिन क्या यह वास्तव में एक हिट के ज्यादा है? आपके उपयोग के मामले पर निर्भर करता है।

मेरे मामले में जब से मुझे पूरा संदर्भ पढ़ने की जरूरत थी बजाय पढ़ने / लिखें

इसलिए मैंने टीटी फ़ाइल में बदलाव किया, और सभी डीबीसीटेन्टेक्ट गुणों को डीबीएसटी के बजाय डीबीएसीए वापस करने के लिए बदल दिया, सभी गुणों से सेट निकाल दिए और प्राप्त करने के लिए, मैंने मॉडल वापस किया।

उदाहरण के लिए:

 public virtual DbQuery<Campaign> Campaigns { get{ return Set<Campaign>().AsNoTracking();} }