2012-09-24 59 views
1
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應該像如何指定的鑰匙,做一個連接上同時使用NHibernate JoinQueryOver

select * from store inner join region on store.regionid = region.regionid 

我怎樣才能得到下面的合作,以實現上述內部聯接。

Session.QueryOver<Store>() 
       .JoinQueryOver<Region>(s => s.Region) 

回答

0

要實現內部連接,您必須在NHibernate映射中設置Store實體和Region實體之間的關係。

您無法使用QueryOver API指定用於連接的鍵。

你的類應該類似於此:

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> 
+0

感謝蘭迪!我開始懷疑,當我在互聯網上搜索沒有找到一個我想要的方式指定鍵的例子。有時,當你真正知道查詢將會是什麼時,感覺非常愚蠢,但是要求通過orm映射來完成。 – dreamerkumar

相關問題