![](/img/trans.png)
[英]Outer Join on two List<> objects returned from entity framework query
[英]Entity not returned from query
我有这个问题,我有 2 个通过外键连接的实体。
我使用SaveChanges()
将它们都保存到数据库中,稍后当我尝试获取AEntity
的idOfEntityB
时,我成功了,但是当我尝试根据从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.