gpt4 book ai didi

c# - Entity Framework : can I turn off AutoDetectChangesEnabled on reading from Local?

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:18 25 4
gpt4 key购买 nike

我有一个包含图层和图层上的图形(用于绘图)的数据库。我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com