我目前有:
context.Entry(employee).Reload();
context.Entry(employee).Reference(p => p.Manager).Load();
context.Entry(employee).Reference(p => p.Department).Load();
我希望加载所有相关实体而不单独指定它们。这样的事情是理想的:
context.Entry(employee).Reload();
context.Entry(employee).LoadAllReferences();
能做到吗?
答案 0 :(得分:1)
我们遇到了类似的问题,其中实体类被添加到另一个类中的集合中,而没有设置导航属性,而是存储在共享的DbContext中。
我们决定将实体与上下文分离,然后在我们需要重新加载导航属性时重新查询Db(如这些解决方案:Force reload of entity in Entity Framework after insert/add和http://dev-doc.blogspot.co.uk/2015/09/entity-framework-reload-newly-created.html)
以下是我们使用的代码示例:
public class EntityRetriever
{
private readonly System.Data.Entity.DbContext _context;
public EntityRetriever(System.Data.Entity.DbContext context)
{
_context = context;
}
public T RetrieveEntity<T>(params object[] entityKeyValues) where T : class
{
var entity = _context.Set<T>().Find(entityKeyValues);
//check if is not an EF proxy class or has changed
if (entity != null
&& !IsProxy(entity)
&& _context.Entry(entity).State == System.Data.Entity.EntityState.Unchanged)
{
//This is the important part to reload navigation properties:
//detach entity from context and reload from db
_context.Entry(entity).State = System.Data.Entity.EntityState.Detached;
entity = _context.Set<T>().Find(entityKeyValues);
}
return entity;
}
public static bool IsProxy(object entityObject)
{
return entityObject != null &&
System.Data.Entity.Core.Objects
.ObjectContext.GetObjectType(entityObject.GetType()) != entityObject.GetType();
}
}