【发布时间】:2015-01-16 14:52:22
【问题描述】:
我最近将我们的解决方案从 EF4.1 升级到了 EF6。我们之前的 create 方法将分离的对象添加到上下文中,保存更改,然后根据新的 id 重新查询对象。我们重新查询对象是因为我们不使用延迟加载,并使用包含/选择来获取导航属性——这些属性是通过获取 IDbSet 并返回 IQueryable 来添加的。简而言之,我不能只返回现有的内存副本——因为它不会被完全加载。我试过分离内存中的副本。我无法刷新 dbcontext(因为我正在处理同一上下文中的其他对象)。
无论如何,大问题,我的大问题是,在 EF6 分支中,当我重新查询该对象时,它返回一个空记录 - 找不到我刚刚创建的那个。记录被持久化到数据库中——我可以看到它。如果我创建一个新的 dbcontext 并查询该记录,我可以找到它。
dbContext.Set<TEntity>().Add(model);
dbContext.SaveChanges();
var newCopy = dbContext.Set<TEntity>().SingleOrDefault(p => p.Id == model.Id);
在这种情况下,newCopy 始终为空。但是如果我得到一个新的 dbContext - 我可以很好地得到对象。
无论如何,我需要解决这个问题。有什么想法吗?
【问题讨论】:
-
可能不相关,但是当我将 EF 4.1 项目升级到 EF 6.1 时遇到查询问题。解决方案是针对项目中的 4.5.1-Framework。 不仅适用于 4.5。
-
嗨斯蒂芬 - 其他一切似乎都工作正常。我们正在使用 .NET 4.0。确实是这个重新查询问题 - 以及深度嵌套包含的一些问题。
-
请把代码贴出来好吗?
-
嗨 buffjape - 我在上面做了。我只是省略了 dbcontext 和获取集合。 dbContext.Set
().Add(Model); dbContext.SaveChanges(); dbContext.Set ().SingleOrDefault(p => p.Id = Model.Id);旁注:我也尝试过 where - 除了新的 dbContext 之外,没有任何东西可以查询对象。 -
_context.Set<TEntity>().Find(id)是否返回任何内容? (其中id是一个对象)
标签: c# entity-framework