gpt4 book ai didi

entity-framework - 调用 DbContext.Set().Include() 不是查询包含的属性?

转载 作者:行者123 更新时间:2023-12-01 02:36:45 25 4
gpt4 key购买 nike

我已经关闭了 DbContext 上的延迟加载和代理创建。我正在使用 Repository partern 和 UnitOfWork。我的 UnitOfWork 继承自 DBConext。这是我正在做的一个例子:

public class User
{
public Guid Id {get;set;}
public virtual Guid UserTypeId {get;set;} //foreign key to UserType and setup in the EF fluent mappings and it does load if I am using lazy loading.
public virtual UserType {get;set;}
}

public class UserType
{
public Guid Id {get;set;}
public string Name {get;set;}
}

这是在我的 UoW 中:
        public IDbSet<TEntity> CreateSet<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}

我通过我的存储库查询上下文:
 protected Expression<Func<TEntity, object>>[] Includes;
public IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> criteria, params Expression<Func<TEntity, object>>[] includes)
{
Includes = includes;
return GetSet().Where(criteria)
.AsEnumerable();
}

public IDbSet<TEntity> GetSet()
{
var set = _unitOfWork.CreateSet<TEntity>();

if(Includes != null)
{
foreach (var include in Includes)
{
set.Include(include);
}
}

return set;

}

因此,如您所见,我传入了要包含在查询中的表达式数组。所以我可以这样称呼它:
var users = userRespository.Get(u => u.Id == SomeGuid, u => u.UserType);

UserType 未包含在查询中,我不知道是什么。我应该在 DbContext 上调用 Set 以外的东西吗?

更新 :

在我调用 base.Set 之前,我在想我需要在那里添加包含。虽然不确定。

最佳答案

IQueryable 上的所有扩展方法通常以他们生产新的方式工作 IQueryable所以如果你想获得效果,你必须分配它:

public IDbSet<TEntity> GetSet()
{
var set = _unitOfWork.CreateSet<TEntity>();

if(Includes != null)
{
foreach (var include in Includes)
{
set = set.Include(include);
}
}

return set;
}

顺便提一句。它看起来很像 my older solution .

关于entity-framework - 调用 DbContext.Set<T>().Include() 不是查询包含的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9840033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com