我正在EF中进行存储库调用,一旦我访问第一个或默认值,我就会得到空引用异常,任何机构可以帮助输入吗?
-
有没有办法检查实体值是否为空? 这样我就可以避免异常。
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>();
下面一行返回 56 个具有 null 值的实体,因为我在表中没有任何实体
//Apply eager loading dbQuery = navigationProperties.Aggregate(dbQuery, (current, navigationProperty) => current.Include(navigationProperty));
下面是我在访问上述空实体时出现空引用异常的地方,下面的语句有什么问题吗?
item = dbQuery .AsNoTracking() //Don't track any changes for the selected item .FirstOrDefault(where); //Apply where clause } return item; }
您是否尝试过检查它是否为空
if(item == null)
{
// Handle null case
}
查询很简单,FirstOrDefault
将返回数据库中的第一项或结果集合中的第一项,如果表中没有要查询的项,EF 自然不会返回任何内容。
EF 通过根据需要返回null
来处理此类情况。只需检查响应是否为 null,避免它的唯一其他方法是在数据库中有一些东西让它返回或对表本身执行计数操作,如果您随后必须再次查询表以获取您刚刚检查的数据是否存在,这是没有意义的。
另外,为什么要创建一个名为"单"的方法?它的实现是错误的,其次,实体框架中公开的Single
方法的行为不同,如果超过 1 个项目与查询匹配,它将引发异常。
我想知道的另一点是,如果您的表为空,为什么您会收到 56 个空项目???