作为另一个问题的一部分,有人强调指出,在处理Include
时,我应该使用强类型而不是字符串,因为这样可以减少潜在的错误,我必须同意,因此我开始更改通用名称存储库,除了我的两种方法(.Find和.FindAsync)之外,其他一切都很好,因为它们不支持Include。
要解决我在EF6中没有使用强类型而使用字符串的问题,我使用了以下代码:
if (!string.IsNullOrWhiteSpace(includeProperties))
{
if (isCollection)
{
this.Context.Entry(organization).Collection(includeProperties).Load();
}
else
{
this.Context.Entry(organization).Reference(includeProperties).Load();
}
}
关于使用IIncludableQueryable作为参数时如何解决此问题的任何建议
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includes = null
在我的职能中:
public virtual async Task<TEntity> GetByIdAsync(
object id,
Func<IQueryable<TEntity>, IIncludableQueryable<TEntity, object>> includes = null,
bool isCollection = false)
{
var entity = await this.Context.Set<TEntity>().FindAsync(id);
//if (entity != null && !string.IsNullOrWhiteSpace(includeProperties))
//{
// if (isCollection)
// {
// this.Context.Entry(entity).Collection(includeProperties).Load();
// }
// else
// {
// this.Context.Entry(entity).Reference(includeProperties).Load();
// }
//}
return entity;
}
目前,我正在通过支持.Include
的GetQueryable函数来使用变通方法,在该函数中,我对过滤器进行硬编码以按ID进行搜索,如下所示:
return await GetQueryable(f => f.Id == id, null, includes).FirstOrDefaultAsync();
这可能就足够了,但同时我将继续进行研究,但是如果有人知道如何在使用.Find / .FindAsync时解决此问题,
谢谢。