2009-09-25 80 views
3

是否有可能在投影中重用组件映射?投影中重用组件(NHibernate)

这里是供应商实体的映射:

<class name="Vendor" table="vendor"> 
    ... 
    <property name="Name" column="Name" /> 
    <component name="Address" class="MyProject.Address, MyAssembly" > 
     <property name="Street" column="street" /> 
     <property name="City" column="City" /> 
    </component> 
    </class> 

因为我想在数据传输对象检索这些供应商,但重用的地址部分(因为有许多领域和一些有用的报告格式化行为)。

public class VendorDTO 
{ 
    public string Name; 
    public Address Address; 

} 

public class Address 
{ 
    public string Street; 
    public string City; 
    public string SomeUsefulBehavour(); 
} 

这可能没有分裂地址出它自己的表?

谢谢!

+0

你想查询? “在投影中重新使用组件映射”是什么意思?我不明白这个问题... – 2009-09-30 08:27:41

+0

可能的提示 - 你可以编写你自己的ResultTranslators;你可以尝试使用HQL构造新的Address();我没有尝试过其中任何一个,所以只是提示。 – Rashack 2009-09-30 13:43:02

+0

是的我一直在寻找类似的查询: 从供应商供应商 选择新VendorDTO(vendor.Name,vendor.Address) 感谢您的提示。 – 2009-09-30 22:55:55

回答

0

我相信这应该 '只是工作':

Session.QueryOver<Vendor>() 
    .SelectList(builder => 
     builder.Select(x => x.Name) 
      .Select(x => x.Address)) 
    .TransformUsing(Transformers.AliasToBean<VendorDTO>()) 
    .List<VendorDTO>();