Jestem trochę zakłopotany. Z tego, co przeczytałem, ustawienie DbContext.AutoDetectChangesEnabled na wartość false powinno wyłączyć śledzenie zmian, wymagające wywołania DbContext.DetectChanges w celu zidentyfikowania zmian, które mają zostać wysłane do bazy danych.DbContext AutoDetectChangesEnabled ustawiony na fałszywe wykrywanie zmian
Jednak z moich logów poniżej wynika, że zmiany są rejestrowane przez moduł śledzenia dbContexts, nawet jeśli ustawienie ma wartość false.
Czy brakuje mi czegoś?
Entity Framework Version: 5.0.0.0
klasa DbContext
public class ProjectContext : DbContext {
public DbSet<Project> Projects {get;set;}
}
klasy 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();
}
metoda rejestrowania
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);
}
}
}
}
Pierwszy dziennik
***Entity Name: Models.Projectis in a state of Added
***CurrentValues***
ProjectId:0
ProjectName:uniqueName
drugie Log
***Entity Name: Models.Projectis in a state of Modified
***CurrentValues***
ProjectId:1
ProjectName:uniqueName
***Original Values***
ProjectId:1
ProjectName:a differentName!
musiałem przeczytać, że kilka razy, ale to nie pomaga odpowiedzieć na moje pytanie dość, dzięki! Przykro nam z powodu błędu kopiowania i wklejania; zaktualizuję pytanie dla potomności. – Jesse
Niestety, "zbiorcze dodawanie podmiotów w pętli" ma miejsce wtedy, gdy chcesz wyłączyć śledzenie zmian. Jest to szybkie przyspieszenie (wielkość próby 1, testowana w mojej aplikacji, ale była to jedyna różnica między dwoma biegami dodającymi ~ 3000 wierszy). –
@EdS .: Dodawanie zbiorcze jest jedną z "najprostszych rzeczy", o których mi chodziło, gdzie faktycznie * mogę * wyłączyć automatyczne wykrywanie zmian. – Slauma