내 회사의 애플리케이션에서 일종의 "뉴스 피드"를 만들고 싶습니다. 시나리오에서 사용자 작업은 다른 종류의 "활동"을 생성하고 다른 사용자는 "뉴스 피드"에서 볼 수 있습니다.Fluent Nhibernate Lazy가 IList에서 Critist를로드합니까?
그러나 "활동"은 모든 사용자와 관련이 없으며 관계를 확인하기 위해 복잡한 코드가 있습니다.
여기 내 활동 클래스
나는 사용자가 볼 최신 10 개 뉴스를 할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;
}
}
입니다. 그러나 Activity 테이블이 상당히 커지고 성능이 문제가되기 때문에 이에 대한 모범 사례를하고 싶습니다.
내가 할 일은 마지막 활동 25 개를 얻고 사용자에게 표시 할 목록을 채우는 지 확인합니다. 예를 들어 사용자에게 5 개의 활동 만 표시되는 경우 25 개의 활동이 추가로 발생합니다.
내가 ID로 주문 전체 목록을 얻을 경우, 배우고, 그것을 사용자가 볼 경우 하나 하나를 검사 할IList<Activity> resultList = session.CreateCriteria(typeof(Activity))
.SetMaxResults(25)
.AddOrder(Order.Desc("Id"))
.List<Activity>();
는 것 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;
}
}
편집 : 여기 는 활동 모델 ActivityMapping된다. 귀하의 질문에 생성 된 SQL의 모습 방법에 대한 경우
public class ActivityMap : ClassMap<Activity>
{
public ActivityMap()
{
Id(x => x.Id);
Map(x => x.Type).CustomType(typeof(Int32));
References(x => x.User).Nullable();
}
}
액티비티에 대한 Fluent NHibernate 매핑은 어떻게 정의되어 있습니까? – WorldIsRound
질문이 업데이트되었습니다. 매핑은 간단합니다. – SadullahCeran