我想在我公司的应用程序中制作一种“新闻提要”。在该场景中,用户操作将生成不同类型的“活动”,其他用户将在他们的“新闻提要”中看到。
然而,一个“活动”并不与所有用户相关,为了确定关系,我们有一段复杂的代码。
这是我的活动课
public class Activity: IActivity
{
public virtual int Id { get; set; }
public virtual ActivityType Type { get; set; }
public virtual User User { get; set; }
public virtual bool IsVisibleToUser(User userLook)
{
// Complex business calculation etc.
return true;
}
}
我想获取用户可见的最新 10 条新闻。但是由于 Activity 表会非常大,而且性能是一个问题,所以我想对其进行最佳实践。
我要做的是获取最后 25 个活动,并检查我们是否填写列表以显示给用户。例如,如果用户只能看到 5 个活动,我将获得另外 25 个活动,依此类推。
IList<Activity> resultList = session.CreateCriteria(typeof(Activity))
.SetMaxResults(25)
.AddOrder(Order.Desc("Id"))
.List<Activity>();
我想知道,如果我得到按 Id 排序的整个列表,并一一检查它是否对用户可见,NHibernate 是否只会加载我为我使用的对象?
IList<Activity> resultList = session.CreateCriteria(typeof(Activity))
.AddOrder(Order.Desc("Id"))
.List<Activity>();
int count = 0;
foreach( Activity act in resultList){
if (act.IsVisible(CurrentUser)){
count++;
// Do something with act
if (count == 10)
break;
}
}
编辑:这是 Activity 模型的 ActivityMapping。
public class ActivityMap : ClassMap<Activity>
{
public ActivityMap()
{
Id(x => x.Id);
Map(x => x.Type).CustomType(typeof(Int32));
References(x => x.User).Nullable();
}
}