我正在使用带有sqlite数据库的Entity-Framework 6.1.3。 在页面加载期间,我正在循环中初始化一些属性(见下文)。
foreach (var trade in model.Trades)
{
trade.ExchangeRates = Db.ExchangeRates.Local;
trade.BaseCurrency = Prj_TradAc.Properties.Settings.Default.BaseCurrency;
}
Db.ExchangeRates.Local永远不会访问预期的数据库。 所以我期望只分配对Db.ExchangeRates.Local的引用,这应该很快。 然而,只有约500次交易,这个循环几乎需要10秒!
当我执行以下操作时
var ers = Db.ExchangeRates.Local;
foreach (var trade in model.Trades)
{
trade.ExchangeRates = ers;
trade.BaseCurrency = Prj_TradAc.Properties.Settings.Default.BaseCurrency;
}
具有相同数据量的相同循环需要~40ms
那么为什么访问DBSet.Local这么慢?
编辑:
Db.Configuration.AutoDetectChangesEnable = false
也可以快速完成任务。但是我仍然不明白为什么这是一个问题。我分配给我的属性只是链接到字段 - 所以这里没有任何操作。在分配期间不应对DBSet进行任何更改。
答案 0 :(得分:3)
只要您访问 Local
属性(使用属性getter),DbContext.Configuration.AutoDetectChangesEnabled
属性为true
(默认情况下),EF就会调用{{1} }减慢过程的方法。