我的代码中有以下方法;
Invoice GetInvoice()
{
return entities.Invoices.First(i => i.InvoiceNo == invoiceData.InvoiceId);
}
我已经阅读了关于第一级缓存的内容,但我不确定如果我做这样的事情,EF6内部会发生什么;
场景1:获取发票并持有本地参考;
var invoice = GetInvoice();
invoice.UpdatedBy = "Pete"
invoice.UpdatedTime = DateTime.Now;
场景2:每次我想更新发票时都要调用GetInvoice;
GetInvoice().UpdatedBy = "Pete"
GetInvoice().UpdatedTime = DateTime.Now;
在第二个场景中,实体框架是第二次查询数据库还是仅返回发票的缓存实例(首先检查缓存实例,如果找不到则只查询数据库)?
答案 0 :(得分:1)
除非您使用二级缓存,否则使用
.Single
,.First
,.Where
等不会缓存结果。
当您调用GetInvoice();
EF here
的效果考虑因素如果您缩进以进行缓存,请阅读有关第二级缓存here
的更多信息答案 1 :(得分:1)
它将第二次查询数据库并返回一个缓存的实例。当您第二次查询发票时,它将执行新查询但随后丢弃所有结果并返回已存在的实例,因为上下文已包含具有相同主键的相同类型的映射实体。例如,如果您的发票将在第一次和第二次电话之间进行外部修改 - 尽管进行了第二次数据库调用,您仍然无法看到这些更改。