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!