更改跟蹤和代理創建是兩種不同的情況。如果您需要禁用更改跟蹤,那麼您必須按照如下所示進行。
public class YourContext : DbContext
{
public YourContext()
{
this.Configuration.AutoDetectChangesEnabled = false;
}
}
然後你不能這樣做ChangeTracker.Entries<IAuditable>().Where(x => x.State == EntityState.Modified).ToList()
。
如果您需要禁用代理創建,那麼您必須在上下文的構造函數上執行該操作,如下所示。
public class YourContext : DbContext
{
public YourContext()
{
this.Configuration.ProxyCreationEnabled = false;
}
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
代理創建機制用於支持延遲加載關係。 EF不會爲代理沒有任何內容的類型創建代理。換句話說,如果您的POCO類中沒有virtual
屬性,那麼您無論是否禁用它都沒有任何影響。
如果您正在序列化您的實體,請考慮關閉代理和延遲加載,因爲反序列化代理可能會非常棘手。
你可以閱讀更多關於它在這裏:Entity Framework Working with Proxies