- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含图层和图层上的图形(用于绘图)的数据库。我使用 SQL Server CE,在应用程序启动时创建数据库上下文,使用 db.Layers.Local
并在应用程序退出前调用 SaveChanges
。
这个“本地”数据库的所有操作都分为两种类型:读取和写入。当我想读取某些实体时,我不会更改它。
例如:
MainModel db = new MainModel(); //created at application start and stored as field of repository
public List<Figure> GetAllFigures(){
db.Configuration.AutoDetectChangesEnabled = false; //disable before querying local
var res = db.Layers.Local.SelectMany(x=>x.Figures).ToList();
db.Configuration.AutoDetectChangesEnabled = true;
return res;
}
public void ChangeLayer(Figure figure, Layer layer){
figure.Layer = layer;
db.Figures.Local;
db.Layers.Local; //manually call detectChanges
}
因此逻辑是在任何更改后对更新调用 DetectChanges
以允许在读取时禁用它。我确实比更改更频繁地阅读,并且在没有 DetectChanges
的情况下阅读有时要快 100 倍。这个逻辑是否正确,一切都会按预期进行?我是否正确理解为什么 EF 在查询 DbSet.Local
时调用 DetectChanges
?
最佳答案
使用 AsNoTracking() 扩展读取所有内容,以便实体不附加到上下文。
如建议的那样,在更改属性之前,将其附加到上下文,更改属性(图层)并将其标记为已修改,以便持久保存。您也可以调用 DetectChanges() 以便自动跟踪修改
关于c# - Entity Framework : can I turn off AutoDetectChangesEnabled on reading from Local?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37525439/
我的处境很奇怪。我阅读了 context.Configuration.AutoDetectChangesEnabled = false; 并决定使用它。但我找不到它。代码是 using (Defaul
我想知道为什么 DbContext 上的 AutoDetectChangesEnabled 属性默认设置为 false。 我想批量插入到我的上下文中,您可能知道将自动检测设置为 false 会带来更好
我有点困惑。根据我的阅读,将 DbContext.AutoDetectChangesEnabled 设置为 false 应该禁用更改跟踪,需要调用 DbContext.DetectChanges 才能
最近我在 EF 中发现了选项 AutoDetectChangesEnabled,在官方文档中指出手动处理 AutoDetectChangesEnabled 可能会导致“细微错误”。 据我所知,将更改的
为了提高 Entity Framework 应用程序的性能,建议设置 AutoDetectChangesEnabled = false。 MSDN 上的以下教程说明: An alternative t
我有一个包含图层和图层上的图形(用于绘图)的数据库。我使用 SQL Server CE,在应用程序启动时创建数据库上下文,使用 db.Layers.Local 并在应用程序退出前调用 SaveChan
知道 Foo.Id 和 Bar.Id 我如何在不从数据库加载实体的情况下创建它们的关系。 class Foo { public int Id { get; set; } public
我是一名优秀的程序员,十分优秀!