Как указать ключи для объединения при использовании 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>
Другие вопросы по тегам