Как указать ключи для объединения при использовании NHibernate JoinQueryOver
public class Store
{
public virtual prop1 { get; set;}
public virtual int RegionID { get; set;}
public virtual Region Region { get; set;
}
public class Region
{
public virtual int RegionID { get; set;}
}
В итоге мой sql должен выглядеть так
select * from store inner join region on store.regionid = region.regionid
Как я могу заставить ниже работать, чтобы достичь внутреннего соединения выше.
Session.QueryOver<Store>()
.JoinQueryOver<Region>(s => s.Region)
1 ответ
Решение
Чтобы достичь внутреннего соединения, вы должны установить отношения между сущностью Store и сущностью Region в ваших сопоставлениях NHibernate.
Вы не можете указать ключи для присоединения с помощью API QueryOver.
Ваши классы должны выглядеть примерно так:
public class Region
{
public virtual int RegionID { get; set;}
public virtual IList<Store> Stores { get; set; }
}
public class Store
{
public virtual int StoreId { get; set;}
public virtual Region Region { get; set; }
}
И ваши отображения должны выглядеть примерно так:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="YourNameSpace.Region, YourNameSpace" table="Region">
<id name="RegionID">
<column name="RegionID" />
<generator class="identity" />
</id>
<bag cascade="all" inverse="true" name="Stores">
<key>
<column name="RegionID" />
</key>
<one-to-many class="YourNameSpace.Store, YourNameSpace" />
</bag>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="YourNameSpace.Store, YourNameSpace" table="Store">
<id name="StoreID">
<column name="StoreID" />
<generator class="identity" />
</id>
<many-to-one class="YourNameSpace.Region, YourNameSpace" name="Region">
<column name="RegionId" />
</many-to-one>
</class>
</hibernate-mapping>