DDi*_*ita 4 entity-framework entity-framework-4.1
我已关闭 DbContext 上的延迟加载和代理创建。我正在使用存储库合作伙伴和工作单元。我的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;}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 UoW 里面的:
public IDbSet<TEntity> CreateSet<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}
Run Code Online (Sandbox Code Playgroud)
我通过我的存储库查询上下文:
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;
}
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,我正在传递要包含在查询中的表达式数组。所以我可能会这样称呼它:
var users = userRespository.Get(u => u.Id == SomeGuid, u => u.UserType);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
顺便提一句。它看起来与我的旧解决方案非常相似。
归档时间: |
|
查看次数: |
4565 次 |
最近记录: |