Хорошо, после нескольких попыток я застрял на этом!
Я использую NHibernate с QueryOver, как показано ниже. У меня есть Product и ProductReview как
public class Product
{
....
public virtual IList<ProductReview> CustomerReviews {get;set;}
....
}
public class ProductReview
{
....
public virtual Product Product {get;set;}
....
}
Отображение на стороне продукта:
HasMany(x => x.CustomerReviews).KeyColumn("ProductId").Inverse().Cascade.None().LazyLoad();
Запрос
Product px = null;
ProductReview rev = null;
var result = CurrentSession
.QueryOver<ProductReview>()
.Where(r => r.IsActive && !r.IsDraft)
.Select(
Projections.Property<ProductReview>(r => r.Id).WithAlias(() => rev.Id),
Projections.Property<ProductReview>(r => r.Title).WithAlias(() => rev.Title)
)
.OrderBy(r => r.ReviewDate).Desc()
.TransformUsing(Transformers.AliasToBean<ProductReview>())
.JoinAlias(r => r.Product, () => px)
.Select(
Projections.Property(() => px.UPC).WithAlias(() => px.UPC),
Projections.Property(() => px.FullName).WithAlias(() => px.FullName)
)
.TransformUsing(Transformers.AliasToBean<Product>())
.Take(5)
.List();
Ошибка:
Значение «Reviews.Models.Product» не относится к типу «Reviews.Models.ProductReview» и не может использоваться в этой универсальной коллекции. Имя параметра: значение
Я действительно не хочу создавать другое DTO. Я хотел бы получить список последних 5 новых обзоров и заполнить его товаром (необходимо заполнить только несколько обязательных полей в обеих сущностях).
Возможно ли это любым способом (кроме raw sql) в NHibernate 3.0?