原来我相信
context.Configuration.AutoDetectChangesEnabled = false;
Run Code Online (Sandbox Code Playgroud)
会禁用更改跟踪.但不是.目前我需要AsNoTracking()在所有LINQ查询上使用(对于我的只读层).是否有全局设置禁用DbContext上的跟踪?
我有点难过.根据我的阅读设置DbContext.AutoDetectChangesEnabled,false应该禁用需要调用的更改跟踪DbContext.DetectChanges,以便识别要发送到数据库的更改.
但是,从我的下面的日志中可以清楚地看到,dbContexts更改跟踪器正在注册更改,即使设置为false也是如此.
我错过了什么吗?
实体框架版本:5.0.0.0
DbContext类
public class ProjectContext : DbContext {
public DbSet<Project> Projects {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
控制器类
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();
}
Run Code Online (Sandbox Code Playgroud)
记录方法
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(); …Run Code Online (Sandbox Code Playgroud)