1st red flag I see is the relation between the productdto and the
person. I don't think they should intermingle.
NH can project to flat objects. if you flatten out the person object
on productdto you can then project from NH to the productdto. for
example
class productdto
{
long ProductId {get;set;}
long PersonId {get;set;}
string Name {get;set;}
}
something like
"select p.id as ProductId, i.id as PersonId, i.FirstName + " " +
i.LastName as Name from Product p join p.InventedBy i"
SetResultTransformer(Transformers.AliasToBean)
List<ProductDto>()
the other option is to use a framework like AutoMapper to convert the
domain into a dto. AutoMapper instead of NH projections.
On Sep 30, 2:08 pm, Vikram Nayak <[email protected]> wrote:
> Documentation on this is sparse, an many of the blog posts I read say
> Entity Projection is not supported in NHibernate. If it's not
> supported any suggestions on how to handle this.
>
> I have two simple entities (PRODUCT and PERSON) and a DTO
> (PRODUCTDTO). I am trying to project the Product.Id and
> Product.InventedBy properties from Product to the ProductDTO which
> will be used in a Report.
>
> public class Product
> {
> public virtual long Id { get; set; }
> public virtual string Name { get; set; }
> public virtual string Category { get; set; }
> public virtual bool Discontinued { get; set; }
> public virtual Person InventedBy { get; set; }
> }
>
> public class Person
> {
> public virtual long Id { get; set; }
> public virtual string FirstName { get; set; }
> public virtual string LastName { get; set; }
> }
>
> public class ProductDto
> {
> public long Id { get; set; }
> public Person InventedBy { get; set; }
> }
>
> var product = new Product { Name = "Mac",
> Category = "Computers" };
> var person = new Person {FirstName = "Steve",
> LastName = "J"};
> product.InventedBy = person;
> IProductRepository repository = new
> ProductRepository();
> repository.Add(product);
>
> ICriteria criteria =
> session.CreateCriteria<Product>();
> criteria.SetProjection(Projections.Property("Id"));
>
> criteria.SetProjection(Projections.Property("InventedBy"));
>
> criteria.SetResultTransformer(Transformers.AliasToBean(typeof(ProductDto)));
> var list = criteria.List<ProductDto>();
> foreach (var dto in list)
> {
> Console.WriteLine(dto.Id); //ID is
> currently populated
> Console.WriteLine(dto.InventedBy.FirstName);
> //InventedBy is not
> }
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.