EntityFramework通用存储库,包含多个
本文关键字:包含多 存储 EntityFramework | 更新日期: 2023-09-27 18:24:48
我正在尝试从通用存储库更改通用检索方法。但我想为includeproperties传递一个字符串,以传递以下内容:params Expression<Func<TEntity, object>>[] includeProperties = null
问题是当我调用这个方法时:
public virtual IEnumerable<TEntity> Retrieve(Expression<Func<TEntity, bool>> filter = null, params Expression<Func<TEntity, object>>[] includeProperties = null)
我想要例如:TEntityExample.Retrieve(filter: c=>c.Id=Id, includeProperties:c=> c.propertynav1, e=> e.propertynav1.propertynav3, e=> e.Prop4)
或者只是如果不需要导航属性TEntityExample.Retrieve(filter: c=>c.Id=Id)
但不知道为什么includeProperties:
不起作用,不被接受,任何人都知道为什么,或者我是否做错了什么。我希望不传递includeProperty或通过指定includeProperties:
传递它的可能性
public virtual IEnumerable<TEntity> Retrieve(Expression<Func<TEntity, bool>> filter = null, string includeProperties = "")
{
IQueryable<TEntity> query = _dbSet;
if (filter != null)
{
query = query.Where(filter);
}
if (!string.IsNullOrEmpty(includeProperties))
{
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
}
return query.ToList();
}
我做了类似的事情,但使用表达式来急切地加载。也许这会有所帮助:
public TEntity Item(Expression<Func<TEntity, bool>> wherePredicate, params Expression<Func<TEntity, object>>[] includeProperties)
{
foreach (var property in includeProperties)
{
_dbSet.Include(property);
}
return _dbSet.Where(wherePredicate).FirstOrDefault();
}