2011-09-06 55 views
1

我對NHibernate很新,我想用這個偉大的技術開始開發。如何查詢NHibernate中的多對多關係?

下面是我的表關係的船:我已經定義了的hbm.xml模式如下

表模式

tableschemas http://dl.dropbox.com/u/33698629/Entities.JPG

tblAirport 
    AirportID 
    AirportShortName 
    AirportFullName 
    AirportTel 

tblGroup 
    GroupID 
    GroupName 

tblAirportGroup 
    AirportID 
    GroupID 

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="TelDir.Core.Domain.Airport, TelDir.Core" table="tblAirport" lazy="false"> 
    <id name="ID" column="AirportID" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 

    <property name="AirportShortName" column="AirportShortName" /> 
    <property name="AirportFullName" column="AirportFullName" /> 

    <set name="Groups" cascade="none" table="tblAirportGroup" lazy="false" access="readonly"> 
     <key column="AirportId"/> 
     <many-to-many class="TelDir.Core.Domain.Group, TelDir.Core" column="GroupId"/> 
    </set> 


    </class> 
</hibernate-mapping> 


<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="TelDir.Core.Domain.Group, TelDir.Core" table="tblGroup" lazy="false"> 
    <id name="ID" column="GroupID" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 

    <property name="GroupName" column="GroupName" /> 

    <bag name="Airports" cascade="none" table="tblAirportGroup" lazy="false" > 
     <key column="GroupID"/> 
     <many-to-many class="TelDir.Core.Domain.Airport, TelDir.Core" column="AirportId"/> 
    </bag> 
    </class> 
</hibernate-mapping> 

我的映射是否正確?我怎樣才能檢索屬於機場的Group(GroupName)列表?

我一直在使用這種語法

ISession session = NHibernateSessionManager.Instance.GetSession(); 
ISet<Group> rValue = session.CreateCriteria(typeof(Airport)) 
.CreateCriteria("Groups") 
.Add(Expression.Eq("ID", ap.ID)) 
.List() as ISet<Group>; 

,但它給我任何結果嘗試。

請問你能指導我嗎?

最好的問候,

回答

0

這是你如何能得到包含機場id爲33,例如羣組:

var groups = session.CreateCriteria<Group>() 
       .CreateCriteria("Airports") 
       .Add(Restrictions.Eq("ID", 33)) 
       .List<Group>(); 
+0

順便說一句,我怎麼能刪除機場集團? – Veasna