दिलचस्प पोस्ट
समान नियमों के साथ कई निष्पादनयोग्य निर्माण सादा पाठ के रूप में HTML टैग कैसे प्रदर्शित करें जावा विधि बनाने के लिए कैसे तर्कों की चर संख्या स्वीकार करता है? अजाक्स अनुरोध के लिए CSRFToken जोड़ना __del__ विधि क्या है, इसे कैसे कॉल करें? file_put_contents अनुमति अस्वीकृत यदि हाइपरलिंक पर क्लिक किया जाए तो यूआरएल को यूआरएल से डाटा कैसे पास किया जाए दिए गए समूहियड / आर्टिफैक्ट आईडी के लिए नवीनतम आर्टिफैक्ट संस्करण प्राप्त करने के लिए Nexus बाकी एपीआई का उपयोग करना किसी बैकग्राउंड वर्कर के निपटान का सही तरीका कैसे PHP में एक ईमेल को मान्य है? पारदर्शी जेबटन क्या यह पायथनिक का उपयोग खंभे के रूप में करना है? PHP में रेफरर निर्धारित करना विंडोज में कर्सर के नीचे शब्द कैसे प्राप्त करें? फेसबुक ओअथ लॉगआउट

DbContext को कैसे रीफ़्रेश करें

मैं इसे DbContext बिना अपने DbContext की सभी संस्थाओं को ताज़ा करना चाहता हूं, मैंने निम्नलिखित की कोशिश की थी और उनमें से कोई भी अर्थ नहीं था:

 var context = ((IObjectContextAdapter)myDbContext).ObjectContext; var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries( EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged) where entry.EntityKey != null select entry.Entity); context.Refresh(RefreshMode.StoreWins, refreshableObjects); //....................................................................... foreach (var entry in this.Orm.ChangeTracker.Entries()) { entry.State = EntityState.Unchanged; } this.Orm.ChangeTracker.DetectChanges(); 

और केवल एक ही है जो मेरे DbContext रिफ्रेश DbContext :

 foreach (var i in this.Orm.ChangeTracker.Entries()) i.Reload(); 

लेकिन यह बहुत धीमा है क्या आप मुझे सही तरीके से चुनने में मदद कर सकते हैं?

वेब के समाधान से एकत्रित समाधान "DbContext को कैसे रीफ़्रेश करें"

मुझे अभी पता चला है कि महत्वपूर्ण परिणाम का मूल्यांकन किया जाना चाहिए क्योंकि Refresh विधि इसे वस्तु के रूप में प्राप्त करती है और इसका मूल्यांकन नहीं करता है

 var context = ((IObjectContextAdapter)myDbContext).ObjectContext; var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries( EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged) where entry.EntityKey != null select entry.Entity).ToList(); context.Refresh(RefreshMode.StoreWins, refreshableObjects); 

और मैं निम्नलिखित को पसंद करता हूं:

 var refreshableObjects = myDbContext.ChangeTracker.Entries().Select(c=>c.Entity).ToList(); context.Refresh(RefreshMode.StoreWins, refreshableObjects); 

मैंने इसे चेक किया और आईडी ठीक काम करता है:

 //Search Box box = dbContext.Boxes.FirstOrDefault(x => x.BoxId == 45); //breakpoint here, change Name of Box by sql management studio //Refresh var context = ((IObjectContextAdapter)dbContext).ObjectContext; context.Refresh(System.Data.Entity.Core.Objects.RefreshMode.StoreWins, box); //Check refresh and if it is in context box = dbContext.Boxes.FirstOrDefault(x => x.BoxId == 45); 

क्या आप सुनिश्चित हैं कि यह वही डीबी-प्रसंग है?

 using System.Data.Entity.Core.Objects; using System.Data.Entity.Infrastructure; using System.Linq; namespace System.Data.Entity { public static class DbContextExtensions { /// <summary> /// Refresh non-detached entities /// </summary> /// <param name="dbContext">context of the entities</param> /// <param name="refreshMode">store or client wins</param> /// <param name="entityType">when specified only entities of that type are refreshed. when null all non-detached entities are modified</param> /// <returns></returns> public static DbContext RefreshEntites(this DbContext dbContext, RefreshMode refreshMode, Type entityType) { //https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/ var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; var refreshableObjects = objectContext.ObjectStateManager .GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified | EntityState.Unchanged) .Where(x => entityType == null || x.Entity.GetType() == entityType) .Where(entry => entry.EntityKey != null) .Select(e => e.Entity) .ToArray(); objectContext.Refresh(RefreshMode.StoreWins, refreshableObjects); return dbContext; } public static DbContext RefreshAllEntites(this DbContext dbContext, RefreshMode refreshMode) { return RefreshEntites(dbContext: dbContext, refreshMode: refreshMode, entityType: null); //null entityType is a wild card } public static DbContext RefreshEntites<TEntity>(this DbContext dbContext, RefreshMode refreshMode) { return RefreshEntites(dbContext: dbContext, refreshMode: refreshMode, entityType: typeof(TEntity)); } } } 

कुछ मामलों में, अगर किसी संग्रह को किसी तीसरे पक्ष के ऐप द्वारा अपडेट किया गया है, तो संग्रह को ऑब्जेक्ट रीफ़्रेश करते समय संग्रह फिर से लोड नहीं किया जा सकता है।

मेरे पास ऐसा मामला था जहां मेरे पास ऑब्जेक्ट ए था जिसके पास एक वस्तु बी के लिए कई रिलेशिपशिप था।

आवेदन 1 ए एलआईटीबी खाली वस्तु के साथ ऑब्जेक्ट ए लोड करता है। एप्लिकेशन 2 ए एलआईटीबी संग्रह भरता है। एप्लिकेशन 1 ऑब्जेक्ट ए पुनः लोड करता है

ऊपर दिए गए समाधान के साथ, ए एलआईटीबी खाली रहता है। मुझे संग्रह ए एलआईटीबी स्पष्ट रूप से पुनः लोड करना पड़ा।

यहां सभी संग्रह पुनः लोड करने का एक सामान्य तरीका है:

 var context = ((IObjectContextAdapter)this).ObjectContext; // detach all added entities ChangeTracker.Entries().Where(e => e.State == EntityState.Added).ToList().ForEach(e => e.State = EntityState.Detached); // select entities var refreshableObjects = ChangeTracker.Entries().Select(e => e.Entity).ToList(); // refresh each refreshable object foreach (var @object in refreshableObjects) { // refresh each collection of the object context.ObjectStateManager.GetRelationshipManager(@object).GetAllRelatedEnds().Where( r => r.IsLoaded).ToList().ForEach( c => c.Load() ); // refresh the object context.Refresh(RefreshMode.StoreWins, @object); }