我有一个表的主键 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 已经附加到上下文,则不应进行数据库查询。
最佳答案
不是隐含的。
Where()
将始终查询数据库。要显式查询缓存,您需要使用 .Local:
dbContext.Entity.Local.Where(...
这不会访问数据库,但只会返回之前缓存/加载的实体。
很高兴知道:要查看查询,请定义一个 Log 函数,如下所示:
dbContext.Database.Log = Console.WriteLine;
关于c# - Entity Framework ,在单个查询中通过主键加载多个实体,同时仍然使用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636133/