【发布时间】:2021-09-24 12:29:28
【问题描述】:
我在插入后检索导航属性时遇到问题。
我正在使用此代码保存数据,但没有设置我不想更改的导航属性。 例如:
var entity = new MyEntity
{
FirstId = 1,
FirstObject = null
SecondId = 1,
SecondObject = null
//...data to update
};
_context.Update(myEntity);
_context.SaveChanges();
然后,如果我尝试访问导航属性,它将为空(即使在保存更改之后跟踪主对象)。 我尝试使用以下方法重新加载数据:
_context.Entry(entity).State = EntityState.Detached;
entity = _context.Set<MyEntity>().Where(e => e.Id == entity.Id).First();
我也尝试过使用 reload:
_context.Entry(entity).State = EntityState.Detached;
_context.Entry(entity).Reload();
不过,导航属性为空。
我在上下文配置中使用 UseLazyLoadingProxies。 获取导航属性的唯一方法是手动加载它:
_context.Entry(entity).Reference(e=> e.FirstObject ).Load()
有没有办法在 SaveChanges() 之后从 db 重新加载数据(丢弃所有缓存的数据)?
【问题讨论】:
-
您可以在实体的对象级别关闭缓存。检查此stackoverflow.com/questions/15828811/…
-
@marc_s 抱歉,我正在使用 EF Core,我已经更新了问题。
-
为什么在这种情况下使用分离实体?我很确定这是问题所在。
-
@SvyatoslavDanyliv 我正在使用分离来尝试从数据库重新加载数据。没有分离我有同样的行为。
-
_context.Update(myEntity);是个问题
标签: c# .net-core entity-framework-core ef-core-5.0