使用FirstOrDefault时,IQueryable抛出null ref异常(其中)

时间:2018-04-19 15:39:50

标签: entity-framework

我正在EF中进行存储库调用,只要我访问第一个或默认我得到空引用异常,任何正文可以帮助输入吗?

  • 有没有办法检查实体值是否为空?所以我可以避免异常。

    short a,*pt=&a;
    printf("%x, %p\n",&a,pt);
    scanf("%d",&a);
    printf("%x, %p\n",&a,pt);
    

    以下行返回56个具有空值的实体,因为我在表格中没有任何实体

     public TEntity GetSingle(Func<TEntity, bool> where, params Expression<Func<TEntity, object>>[] navigationProperties)
    {
        TEntity item = null;
        using (var context = new CDREntities())
        {
            IQueryable<TEntity> dbQuery = context.Set<TEntity>();
    

    下面是当我访问上面的空实体时我得到空引用异常的地方,下面的语句有什么问题吗?

            //Apply eager loading
            dbQuery = navigationProperties.Aggregate(dbQuery, (current, navigationProperty) => current.Include(navigationProperty));
    

1 个答案:

答案 0 :(得分:0)

您是否尝试过检查它是否为空

if(item == null) 
{
    // Handle null case
}

查询很简单,FirstOrDefault将返回数据库中的第一个项,或者结果集合中的第一项,如果查询的表中没有项目, EF自然没有什么可以回归的。

EF通过返回null来处理此类情况。只需检查响应是否为空,唯一的另一种避免方法就是在数据库中有一些东西让它返回或对表自己执行一次计数操作,如果你将要查询表,这是没有意义的再次查看您刚检查过的数据是否存在。

另外,为什么要创建一个名为Single的方法?它的实现是错误的,其次,实体框架中公开的Single方法行为不同,如果多于1个项目与查询匹配,则会抛出异常。

我想知道的另一点是,如果你的桌子是空的,你将收到56个空项目