泛型获取方法不包括 FK
本文关键字:FK 不包括 方法 获取 泛型 | 更新日期: 2023-09-27 18:35:51
我正在尝试创建一个通用的 GetAll 方法,该方法适用于我的 ASP.NET MVC4 项目中的每个模型类。
这是我的代码:
public static List<T> GetAll(params string[] includeProperties)
{
using (MovieSiteDb db = new MovieSiteDb())
{
var entities = db.Set<T>();
foreach (var includeProperty in includeProperties)
{
entities.Include(includeProperty);
}
return entities.ToList();
}
}
现在我用以下方式调用它(Movie 继承 GetAll 方法):
Movie.GetAll("Category");
但是,当我尝试访问视图模型中的外键"类别"时,我收到错误。为什么它没有被包括在内?
我不能说我自己使用过 EF,但一般来说,当您调用方法时,LINQ 不会改变查询 - 而是返回一个新查询。因此,如果您将代码更改为:
DbQuery<T> entities = db.Set<T>();
foreach (var includeProperty in includeProperties)
{
entities = entities.Include(includeProperty);
}
您可能会发现这可以解决问题。
(entities
的类型现在固定为 DbQuery<T>
,而不是使用 var
将其隐式键入DbSet<T>
,因为Include
返回DbQuery<T>
。
这是我
的通用存储库的一部分,其中包含一个可以使用lambda表达式调用的AllIncluding
方法
private readonly IUnitOfWork _UnitOfWork;
protected MyContext Context { get { return Uow.Context; } }
protected IUnitOfWork Uow
{
get { return _UnitOfWork; }
}
public RepositoryBase(IUnitOfWork unitOfWork)
{
_UnitOfWork = unitOfWork;
}
public virtual IQueryable<T> All
{
get
{
return Context.Set<T>();
}
}
public virtual IQueryable<T> AllIncluding(params Expression<Func<T
, object>>[] includeProperties)
{
IQueryable<T> query = All;
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
//string sql = query.ToString();
return query;
}
下面是我如何从控制器调用它的示例:
IRepository<Answer> repo = _Uow.AnswerRepository;
IOrderedQueryable<Answer> answers = repo.AllIncluding(answer => answer.Questions)
.OrderBy(answer => answer.SortOrder)
.ThenBy(answer => answer.Text);
在这里进入工作单元和其他东西
对于您对 lambda 表达式的关注,我知道您可以在下面执行
var prodcutmasters = this.db.ProdcutMasters.Include(p => p.CategoriesMaster);
return (prodcutmasters.ToList());