#nhibernate #fluent-nhibernate
#nhibernate #fluent-nhibernate
Вопрос:
У меня есть следующее отображение в Fluent-NHibernate Map
public class PostMap : ClassMap<Post>
{
public PostMap()
{
Id(i => i.Id).GeneratedBy.GuidComb();
Map(x => x.SiteId);
Map(x => x.Message);
Map(x => x.DateCreated);
Map(x => x.DateModified);
HasMany(x => x.Comments)
.OrderBy("DateCreated DESC")
.ReadOnly()
.Not.LazyLoad();
}
}
К каждому сообщению много комментариев, что я хотел бы сделать, так это вернуть только top 5 из базы данных, а не удалять их в коде.
Ответ №1:
Вы можете сделать это вручную. Игнорируйте свойство Comments
из Post
сопоставления и загружайте его вручную с помощью Take(X)
:
// query posts
foreach (var post in posts)
{
post.Comments = Session.QueryOver<Comments>()
.Where(x => x.PostId == post.Id)
.Take(X)
.Future();
}
С помощью Future
вместо List
этого для всех комментариев будет выполняться один обход базы данных туда и обратно.
Ответ №2:
Должно быть возможно с фильтрами. Читайте здесь:http://nhibernate.info/doc/nh/en/index.html#filters
Комментарии:
1. Как здесь помогают фильтры? Мне действительно нужно предложение TOP / TAKE, а не WHERE.