public class Company_Product
{
public virtual Int32 Id { get; set; }
public virtual DateTime SalesDate { get; set; }
public virtual Company Company{ get; set; }
public virtual Product Product { get; set; }
}
public class Company
{
public virtual Int32 Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Company_Product> company_product { get; set; }
}
public class Product
{
public virtual Int32 Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Company_Product> company_product { get; set; }
}
Company.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="BusinessObjectApp"
namespace="BusinessObjectApp.Modal">
<!-- more mapping info here -->
<class name="Company" table="[Company]">
<id name="Id" column="Id">
<generator class="native" />
</id>
<property name="Name" column="Name" />
<bag name="company_product" table="[Company_Product]" inverse="true" lazy="true">
<key column="CompanyID" />
<one-to-many class="Company_Product" />
</bag>
</class>
</hibernate-mapping>
Company_Product.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="BusinessObjectApp"
namespace="BusinessObjectApp.Modal">
<!-- more mapping info here -->
<class name="Company_Product" table="[Company_Product]">
<id name="Id" column="Id">
<generator class="native" />
</id>
<property name="SalesDate" column="SalesDate" />
<!-- Many to many -->
<many-to-one class="Company" name="Company" column="CompanyID" />
<many-to-one class="Product" name="Product" column="ProductID" />
</class>
</hibernate-mapping>
Product.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="BusinessObjectApp"
namespace="BusinessObjectApp.Modal">
<!-- more mapping info here -->
<class name="Product" table="[Product]">
<id name="Id" column="Id">
<generator class="native" />
</id>
<property name="Name" column="Name" />
<bag name="company_product" table="[Company_Product]" inverse="true" lazy="true">
<key column="ProductID" />
<one-to-many class="Company_Product" />
</bag>
</class>
</hibernate-mapping>
I able to retrieve all item if using the code below:
IList<Company_Product> test = session.QueryOver<Company_Product>()
.List<Company_Product>();
However the code below produce error. I know that is because Company_Product class does not have the properties. I want to map them to the corresponding object like the output above. Is it possible?
string query = "SELECT C.Name, P.Name, CP.SalesDate FROM [Company_Product] CP " +
"LEFT JOIN [Company] C ON CP.CompanyID = C.Id " +
"LEFT JOIN [Product] P ON CP.ProductID = P.Id";
var test = session.CreateSQLQuery(query)
.SetResultTransformer(Transformers.AliasToBean<Company_Product>())
.List<Company_Product>();
UPDATE:
Now I able to retrieve the whole object.
Company_Product company_product = null;
Company company = null;
Product product = null;
IList<Company_Product> test = session.QueryOver<Company_Product>()
.Left.JoinAlias(cp => cp.Company, () => company)
.Left.JoinAlias(cp => cp.Product, () => product)
.SelectList(list => list
.Select(cp => cp.Company).WithAlias(() => company_product.Company)
.Select(cp => cp.Product).WithAlias(() => company_product.Product)
.Select(cp => cp.SalesDate).WithAlias(() => company_product.SalesDate)
)
.TransformUsing(Transformers.AliasToBean<Company_Product>())
.List<Company_Product>();
But I cannot set the nested property.
Company_Product company_product = null;
Company company = null;
Product product = null;
IList<Company_Product> test = session.QueryOver<Company_Product>()
.Left.JoinAlias(cp => cp.Company, () => company)
.Left.JoinAlias(cp => cp.Product, () => product)
.SelectList(list => list
.Select(cp => cp.Company.Name).WithAlias(() => company_product.Company.Name)
.Select(cp => cp.Product.Name).WithAlias(() => company_product.Product.Name)
.Select(cp => cp.SalesDate).WithAlias(() => company_product.SalesDate)
)
.TransformUsing(Transformers.AliasToBean<Company_Product>())
.List<Company_Product>();
Can anyone help me? I am new to Nhibernate and sorry for my bad English.