我有这段代码:
return session.Query<Payment>()
.OrderBy(payment => payment.Created)
.Skip((page - 1)*pageSize)
.Take(pageSize)
.ToArray();
由于NHibernate的Query方法没有任何Contract.Ensures,我收到此警告:
CodeContracts:需要unproven:source!= null
为了解决这个问题,我写了这个:
var query = session.Query<Payment>();
Contract.Assume(query != null);
return query
.OrderBy(payment => payment.Created)
.Skip((page - 1)*pageSize)
.Take(pageSize)
.ToArray();
这是正确的方法吗?现在Resharper认为查询可以为null,因为我将它与null进行比较。
对标有“NotNull”属性的实体
的可能“空”赋值
答案 0 :(得分:3)
是的,这是正确的方法。 Resharper默认不理解代码合同,请查看this question以解决问题。
你可能想在你的库中创建一个Query
方法,该方法只调用NHibernate的Query
,但也有一个Ensures
合同,以节省你必须在任何地方使用Assume
类似的东西(我猜测这里的类型):
static IQueryable<T> MyQuery<T>(this Session s)
{
Contract.Requires(s != null);
Contract.Ensures(Contract.Result<IQueryable<T>>() != null);
var result = s.Query<T>();
Contract.Assume(result != null);
return result;
}