Sono un po 'perplesso. Da quello che ho letto l'impostazione del DbContext.AutoDetectChangesEnabled su false dovrebbe disattivare il rilevamento delle modifiche che richiedono uno a chiamare DbContext.DetectChanges al fine di individuare le modifiche da inviare al database.DbContext AutoDetectChangesEnabled impostata su false rilevare i cambiamenti
Tuttavia, dai miei registri di seguito è chiaro che le modifiche vengono registrate da dbContexts cambia traccia, anche se l'impostazione è impostata su false.
Mi manca qualcosa?
Entity Framework Version: 5.0.0.0
classe DbContext
public class ProjectContext : DbContext {
public DbSet<Project> Projects {get;set;}
}
classe Controller
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();
}
metodo registrazione
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);
}
}
}
}
primo registro
***Entity Name: Models.Projectis in a state of Added
***CurrentValues***
ProjectId:0
ProjectName:uniqueName
Seconda Log
***Entity Name: Models.Projectis in a state of Modified
***CurrentValues***
ProjectId:1
ProjectName:uniqueName
***Original Values***
ProjectId:1
ProjectName:a differentName!
Ho dovuto leggere oltre che un paio di volte, ma che aiuta a rispondere alla mia domanda un bel po ', grazie! Mi dispiace per l'errore di copia e incolla; aggiornerò la domanda per i posteri. – Jesse
Sfortunatamente, "l'aggiunta di entità in un loop", è quando si desidera disabilitare il rilevamento delle modifiche. È un _massive_ speedup (dimensione del campione pari a 1, testato nella mia app, ma era l'unica differenza tra due esecuzioni che aggiungevano ~ 3000 righe). –
@EdS .: L'aggiunta di massa è una delle "cose più semplici" intendevo dire che in realtà avrei * disabilitato * il rilevamento automatico dei cambiamenti. – Slauma