Entity framework 使用实体框架DbContext DbSet重新加载所有相关对象/导航属性
我目前有:Entity framework 使用实体框架DbContext DbSet重新加载所有相关对象/导航属性,entity-framework,dbcontext,dbset,Entity Framework,Dbcontext,Dbset,我目前有: 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(empl
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();
可以这样做吗?我们遇到了一个类似的问题,在没有设置导航属性的情况下,将实体类添加到另一个类的集合中,并且该实体类存储在共享的DbContext中 我们决定从上下文中分离实体,然后在需要重新加载导航属性时重新查询数据库(如以下解决方案:和) 下面是我们使用的代码示例:
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();
}
}
公共类EntityRetriever
{
私有只读System.Data.Entity.DbContext\u context;
公共EntityRetriever(System.Data.Entity.DbContext上下文)
{
_上下文=上下文;
}
公共T RetrieveEntity(参数对象[]entityKeyValues),其中T:class
{
var entity=_context.Set().Find(entityKeyValues);
//检查是否不是EF代理类或是否已更改
如果(实体!=null
&&!IsProxy(实体)
&&_context.Entry(entity.State==System.Data.entity.EntityState.Unchanged)
{
//这是重新加载导航属性的重要部分:
//从上下文中分离实体并从数据库中重新加载
_context.Entry(entity.State=System.Data.entity.EntityState.Detached;
实体=_context.Set().Find(entityKeyValues);
}
返回实体;
}
公共静态bool IsProxy(对象entityObject)
{
返回entityObject!=null&&
System.Data.Entity.Core.Objects
.ObjectContext.GetObjectType(entityObject.GetType())!=entityObject.GetType();
}
}