Я немного в тупике. Из того, что я прочитал, параметр DbContext.AutoDetectChangesEnabled to false должен отключить отслеживание изменений, требующее вызова DbContext.DetectChanges, чтобы идентифицировать изменения, которые необходимо отправить в базу данных.DbContext AutoDetectChangesEnabled установлен на ложные обнаружение изменений
Однако из моих журналов ниже видно, что изменения регистрируются с помощью трекера dbContexts, даже если для параметра установлено значение false.
Я что-то упустил?
Entity Framework Версия: 5.0.0.0
DbContext класс
public class ProjectContext : DbContext {
public DbSet<Project> Projects {get;set;}
}
класс 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();
}
Метод регистрации
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);
}
}
}
}
Первый журнал
***Entity Name: Models.Projectis in a state of Added
***CurrentValues***
ProjectId:0
ProjectName:uniqueName
Второй Вход
***Entity Name: Models.Projectis in a state of Modified
***CurrentValues***
ProjectId:1
ProjectName:uniqueName
***Original Values***
ProjectId:1
ProjectName:a differentName!
я должен был прочитать более, что в несколько раз, но это поможет ответить на мой вопрос совсем немного, спасибо! Извините за ошибку копирования и вставки; я уточню вопрос для потомков. – Jesse
К сожалению, «массовое добавление сущностей в цикле» - это когда вы хотите отключить отслеживание изменений. Это ускорение _massive_ (размер выборки 1, проверенный в моем приложении, но это была единственная разница между двумя запусками, добавляющими ~ 3000 строк). –
@EdS .: Массовое добавление - одна из «простейших вещей», я имел в виду, где я на самом деле * бы * отключил автоматическое обнаружение изменений. – Slauma