我有一个泛型类,它有一个使用Find的Get方法从数据库中查找实体。它正在工作,但它不包括在对象中找到的其他实体。
示例:
public class GenericRepository<TEntity> where TEntity : class
{
public virtual TEntity GetByID(object id)
{
return dbSet.Find(id);
}
}
可以在检索到的对象中找到的实体(例如,名为User)可以找到一个实体,但它是null。当我返回对象时,我需要它。有什么想法吗?
答案 0 :(得分:1)
您必须将导航属性标记为virtual
。
public class User
{
public int ChildID;
public virtual Child ChildEntity;
}
virtual
关键字将标记您的媒体资源,以便在访问时延迟加载。
答案 1 :(得分:0)
只要你可以延迟加载实体,标记的答案就会有效。
如果您想要急切地加载,那么另一种方法是编写包含如下函数的泛型:
public IQueryable<TEntity> Including(params Expression<Func<TEntity, object>>[] _includeProperties)
{
IQueryable<TEntity> query = m_context.Set<TEntity>();
return _includeProperties.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
}
可以用来实现类似的东西,唯一的问题是你必须知道要加载的相关实体。用法是这样的:
myEntity returnedEntity = myEntityRepository
.Including(x => x.Child1, x => x.Child2)
.FirstOrDefault(x => x.Id == id);