DbContext AutoDetectChangesEnabled wurde auf falsches Erkennen von Änderungen festgelegt

Ich bin ein bisschen ratlos. Nach dem was ich gelesen habe setzt das einDbContext.AutoDetectChangesEnabled zufalse sollte die Änderungsnachverfolgung deaktivieren, wenn ein Anruf erforderlich istDbContext.DetectChanges um Änderungen zu identifizieren, die an die Datenbank gesendet werden sollen.

Aus den nachstehenden Protokollen geht jedoch hervor, dass die Änderungen von dbContexts change tracker registriert werden, auch wenn die Einstellung auf false festgelegt ist.

Vermisse ich etwas?

Entity Framework Version: 5.0.0.0

DbContext-Klasse

public class ProjectContext : DbContext {
    public DbSet<Project> Projects {get;set;}
}

Controller-Klasse

private ProjectContext db = new ProjectContext();

public method(){
    Project p = new Project("uniqueName");
    db.Configuration.AutoDetectChangesEnabled = false;
    db.Projects.Add(p);
    DebugChangeTracker();
    db.SaveChanges();

    db.Projects.First().ProjectName = "a differentName!";
    DebugChangeTracker();
    db.SaveChanges();
}

Protokollierungsmethode

    private void DebugChangeTracker()
    {
        var path = "C:\\mypath\\";
        path = path + Util.GetMsSinceEpoch().ToString() + "changeTracker.log";

        using (StreamWriter sw = new StreamWriter(path))
        {
            var changeTracker = db.ChangeTracker;
            var entries = changeTracker.Entries();
            foreach (var x in entries)
            {

                var name = x.Entity.ToString();
                var state = x.State;

                sw.WriteLine("");
                sw.WriteLine("***Entity Name: " + name +
                             "is in a state of " + state);
                var currentValues = x.CurrentValues;
                sw.WriteLine("***CurrentValues***");
                PrintPropertyValues(currentValues,sw);
                if (state != EntityState.Added)
                {
                    sw.WriteLine("***Original Values***");
                    PrintPropertyValues(x.OriginalValues,sw);
                }
            }
        }
    }

Erstes Protokoll

***Entity Name: Models.Projectis in a state of Added
***CurrentValues***
ProjectId:0
ProjectName:uniqueName

Zweites Protokoll

***Entity Name: Models.Projectis in a state of Modified
***CurrentValues***
ProjectId:1
ProjectName:uniqueName
***Original Values***
ProjectId:1
ProjectName:a differentName!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage