2012-09-24 94 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

相关问题