2012-12-11 99 views
1

我有一個包含關聯對象列表的類。Nhibernate一對多標準

我有如下圖吧:

<class name="MyDto" table="`MyView`" mutable="false" lazy="false"> 
    <id name="Id" column="ID" type="int"> 
     <generator class="assigned" /> 
    </id> 

    <set name="Days" cascade="all-delete-orphan" lazy="false" > 
      <key column="Id" /> 
      <one-to-many class="MyAssociatedObj"/> 
    </set> 
</class> 

<class name="MyAssociatedObj" table="V_SC_NEED" mutable="false" lazy="false" > 
    <id name="Id" column="`ID2`" type="int"> 
     <generator class="assigned" /> 
    </id> 

    <property type="DateTime" not-null="true" name="DayDate" column="`Date`" /> 

    <component name="Audit"> 
     <property type="string" not-null="true" length="255" name="Username" column="`USERNAME`" /> 
     <property type="decimal" not-null="true" name="PreviousValue" column="`PrevVal`" /> 
    </component> 
</class> 

我想要做的是讓MyDto對象名單,由我關聯的對象,MyAssociatedObject過濾。

這意味着,例如,如果我這樣做:

UnitOfWork.Session.CreateCriteria<MyDto>().List<MyDto>() 

我得到的42行的列表。 現在,我想通過關聯對象來過濾它們之間的限制。 的問題是,當我這樣做:

UnitOfWork.Session.CreateCriteria<MyDto>().CreateAlias("Days", "days").Add(Restrictions.Between("days.DayDate", query.FromDate, query.ToDate)); 

我得到,不知何故684行! (一些cartesial產品或東西)。

有沒有建議嗎? 非常感謝!

+0

你可以發佈你的MyDto的equals方法嗎? – Firo

回答

2

因爲你是加入MyAssociatedObj,這似乎是在你的MyDTO多到一個關係你得到第二個查詢更多行。
如果您想篩選出的MyDTO副本,您可以使用DistinctRootResultTransformer:

UnitOfWork.Session.CreateCriteria<MyDto>().CreateAlias("Days", "days") 
    .Add(Restrictions.Between("days.DayDate", query.FromDate, query.ToDate)) 
    .SetResultTransformer( 
      new NHibernate.Transform.DistinctRootEntityResultTransformer()); 

希望它能幫助。

+0

謝謝,解決了! – user1894419

+0

@ user1894419然後請將我的答案標記爲已接受。它可以幫助其他用戶:D –