.Find / .FindAsync在EF Core中不支持IIncludableQueryable

时间:2019-12-29 03:12:13

标签: c# entity-framework-6 entity-framework-core

作为另一个问题的一部分,有人强调指出,在处理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时解决此问题,

谢谢。

0 个答案:

没有答案