实体框架,Include路径表达式必须引用在类型上定义的导航属性

时间:2016-11-14 22:07:32

标签: c# asp.net-mvc entity-framework

我正在尝试使用EF的自定义框架,但我遇到了一个我不明白的问题。错误如下。这似乎非常明显,但我不确定如何解决它

The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.

参数名称:路径

我正在调用此函数,它会抛出上面的异常。

_menuRepository.GetAll(d => d.DateToDisplay <= DateTime.Today).OrderByDescending(d=>d.Id).Take(100).ToList();

和GetAll()函数如下所示。

public virtual IList<T> GetAll(params Expression<Func<T, object>>[] navigationProperties)
{
    List<T> list;
    using (var context = new DBEntities())
    {
        IQueryable<T> dbQuery = context.Set<T>();

        //Apply eager loading
        foreach (Expression<Func<T, object>> navigationProperty in navigationProperties)
            dbQuery = dbQuery.Include<T, object>(navigationProperty); //**** It throws the exception here

        list = dbQuery
            .AsNoTracking()
            .ToList<T>();
    }
    return list;
}

我做错了什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

EF中的表达式应该是一个检索对象的属性的lambda。在你的例子中

d => d.DateToDisplay <= DateTime.Today

谓词 - 它评估为布尔值:这就是为什么Include无法确定哪个属性包含&#34;。

我猜你已经把Include与LINQ Where clase混淆了。显然,这应该有效:

_menuRepository.GetAll(d => d.DateToDisplay).OrderByDescending(d=>d.Id).Take(100).ToList();

如果只有T类型具有属性 DateToDisplay