Refactoring EF6 zu EF-Core

Habe ich schon versucht umgestalten einige EF6-code EF-Core-1 und schlagen einen kleinen Stolperstein. Der code, den ich bin versucht zu konvertieren ist hier:

https://github.com/mehdime/DbContextScope

Alles ist meistens in Ordnung, aber DbContextScope.cs in insbesondere erweist es sich als schwierig, z.B. diese Methode (bearbeitet für die Kürze):

        public void RefreshEntitiesInParentScope(IEnumerable entities)
    {
        foreach (IObjectContextAdapter contextInCurrentScope in 
            _dbContexts.InitializedDbContexts.Values)
        {
            var correspondingParentContext =
                _parentScope._dbContexts.InitializedDbContexts.Values
                    .SingleOrDefault(parentContext => 
                        parentContext.GetType() == contextInCurrentScope.GetType())
                           as IObjectContextAdapter;

            if (correspondingParentContext == null)
                continue;

            foreach (var toRefresh in entities)
            {
                ObjectStateEntry stateInCurrentScope;
                if (contextInCurrentScope.ObjectContext.ObjectStateManager
                        .TryGetObjectStateEntry(toRefresh, out stateInCurrentScope))
                {
                    var key = stateInCurrentScope.EntityKey;

                    ObjectStateEntry stateInParentScope;
                    if (correspondingParentContext.ObjectContext.ObjectStateManager
                       .TryGetObjectStateEntry(key, out stateInParentScope))
                    {
                        if (stateInParentScope.State == EntityState.Unchanged)
                        {
                            correspondingParentContext.ObjectContext.Refresh(
                                RefreshMode.StoreWins, stateInParentScope.Entity);
                        }
                    }
                }
            }
        }
    }

Fragen.

Erstens, ich weiß, ich kann ersetzen ObjectContext.ObjectStateManager mit der neuen ChangeTracker aber wollen, um sicherzustellen, dass der Eintrag, den ich erhalten ist erhalten richtig.Wie würden Sie die folgende Zeile übersetzen in EF-Core?

contextInCurrentScope.ObjectContext.ObjectStateManager
    .TryGetObjectStateEntry(toRefresh, out stateInCurrentScope)

Zweitens, was ist der Gegenwert dafür, in EF-Core?

correspondingParentContext.ObjectContext.Refresh

Dank!

P. s. Es gibt viele hilfreiche Kommentare im Quellcode auf der GitHub-repo oben.

InformationsquelleAutor Richard | 2016-07-18



One Reply
  1. 1

    Ich denke, der richtige Weg, um eine Person Eintritt, und somit die Tasten und der Status, über:

    var entry = contextInCurrentScope.Entry(toRefresh);
    var keys = entry.Metadata.GetKeys();
    var state = entry.State;

    können Sie auch aktualisieren Sie ein einzelnes Objekt aus der Datenbank mit dem Eintrag wie folgt:

    entry.Reload();

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.