繁体   English   中英

查询未返回实体

[英]Entity not returned from query

我有这个问题,我有 2 个通过外键连接的实体。

  • AEntity:id、idOfEntityB(外键、约束)、字段...
  • BEntity:id,字段...

我使用SaveChanges()将它们都保存到数据库中,稍后当我尝试获取AEntityidOfEntityB时,我成功了,但是当我尝试根据从BEntity获得的 id 获取AEntity时,我什么也没得到:

context.AEntities.Add(new AEntity {
   BEntity = new BEntity { ... }
});
context.SaveChanges();
. 
. 
. 
var id1 = context.AEntities.Select(x => x.idOfEntityB);
var bEntities = context.BEntities.Where(x => id1.Contains(x.id));

bEntities什么都没有。 但是我能够在 id1 中有值的事实更加令人困惑,因为它们具有外键关系(有约束),此外,如果没有将 id 保存到数据库中,则无法创建它。

后来,当我查看数据库时,我看到了两个实体。

它有时会发生,我无法重现这个问题,我不能给出更多的例子,因为有很多代码,我相信它与缓存有关,因此想问这样的事情是否可能如何。

有没有办法将实体保存到数据库中,而上下文(与保存的上下文不同)不能完成所有实体?

如果您依赖于查看不同 DbContext 实例之间的 state 变化之间的变化,这可能是您遇到的问题。 当一个 DbContext 加载了实体,然后另一个 DbContext 实例对这些记录进行更改或数据库中的记录在后台更改时,原始 DbContext 将不会刷新数据库中的实体。

EF 确实支持从数据库重新加载实体的能力,但是在处理子 collections 时,执行完全刷新会变得有点复杂。 您实际上需要告诉 DbContext 忘记所有子集 collections,停止跟踪父集,清除父集的子集,然后重新附加并重新加载子集。 我最近在这个问题的答案中介绍了这一点: Replaceing a entity collection in Entity Framework Core 会导致 DbContext 在未保存到 db 时获取新值。 如何重新加载收藏?

最终,DbContext 的生命周期应尽可能短。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM