用户实体可能会有数千个用户操作。有时,我不想检索(对于只读实体)所有操作,而是只想检索“最近的10个或未完成的”。
public class SimpleForm
{
public class User : EntityBase
{
// ...
private ISet<UserOperation> _recentOperations = new HashedSet<UserOperation>();
public virtual ISet<UserOperation> RecentOperations { get { return _recentOperations; } set { _recentOperations = value; } }
}
}
那我该怎么指定它呢?我认为我可以使用映射覆盖来实现?
我知道可以用单独的查询来完成这个任务,但是实体映射是否也能做到呢?
另外,我想知道是否有可能对非只读实体进行类似操作集合的修改?
更新:我尝试使用
DateTime dateTime = (DateTime.UtcNow - TimeSpan.FromDays(15));
mapping.HasMany(x => x.RecentOperations)
.Where(x => x.EndedAt == null || x.EndedAt < dateTime);
但是它显示“无法将表达式转换为SQL”。
我用以下内容进行了替换
mapping.HasMany(x => x.RecentOperations)
.Where(x => x.EndedAt == null);
现在它会在内部引发空引用异常
在FluentNHibernate.Utils.ExpressionToSql.Convert(Object value)中, FluentNHibernate.Utils.ExpressionToSql.Convert(ConstantExpression expression), 以及FluentNHibernate.Utils.ExpressionToSql.Convert[T](Expression`1 expression, UnaryExpression body)中。