【问题标题】:Entity Framework, Load multiple entities by primary key in a single query while still using caching实体框架,在单个查询中按主键加载多个实体,同时仍使用缓存
【发布时间】:2016-04-15 00:06:58
【问题描述】:

我有一个表的主键 ID 列表,我想将其实体拉入 EF 内存、修改然后保存。

只有一个 id 你会做类似的事情

var entity = dbContext.Entity.Find(id);

entity.SomeColumn = "something";

dbContext.SaveChanges()

目前我正在做这样的事情来将所有实体拉到一个 RTT 中进行修改。

int[] ids = new int[] { 1, 2, 3, 4 };

Entity[] entities = dbContext.Entity
  .Where(c => ids.Contains(c.PrimaryKey))
  .ToArray();

问题是,EF 是否足够聪明,知道在访问我的数据库之前检查缓存?例如,如果实体 1-4 已附加到上下文,则不应进行 db 查询。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-6


    【解决方案1】:

    不是隐含的。

    Where() 将始终查询数据库。要显式查询缓存,您需要使用 .Local

    dbContext.Entity.Local.Where(...

    这不会命中数据库,但只会返回之前已缓存/加载的实体。

    很高兴知道:要查看查询,请定义这样的 Log 函数:

    dbContext.Database.Log = Console.WriteLine;

    【讨论】:

    • 有趣的谢谢;没有时间做我自己的测试,所以我发布了,但我计划做一些。 Local 属性似乎很有用,我想我会创建一个类似于 Entity.Find 的辅助函数,它接受多个 id 并首先检查 Local 属性。
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多