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

标签 entity-framework entity-framework-4.1

我已经关闭了 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/

相关文章:

c# - 更新实体列表的有效方法

entity-framework - Entity Framework UnintentionalCodeFirstException

mysql - 无法从 asp.net mvc 项目连接到 MySQL

c# - 首先在 EF4.1 代码中,使用注释、配置文件或在 OnModelCreating 中配置实体有什么区别?

.net - 如何使用 Entity Framework 4.1 Fluent API 映射枚举?

entity-framework-4.1 - 尝试使用 EF4.1 Code First 创建数据库时出现奇怪错误

c# - 迁移 "our target project ' xxx' 与您的迁移程序集 'xxx' 不匹配“使用 aspnet Core 1.0 RC2 -

c# - 根据用户输入动态更新连接字符串

c# - 使用 Entity Framework 4.1,如何使用不同的字段名称配置与复合键的一对多关系?