2015-09-23 20 views
0

我有一個主表PURCHASE BILL MASTER和一個子表PURCHASE BILL DETAILS。 我在子表中寫的IMPL得到數據如下:Nhibernate多對一映射返回重複值

public IList<PurchaseBillDetails> GetDetailsByInvDate(string FrmDate, string ToDate, int ShopId, int DeptId, int DrugId) 
    { 
     ICriteria Query = SessionFactory 
     .GetCurrentSession() 
     .CreateCriteria(typeof(PurchaseBillDetails)) 
     .CreateAlias("PurchaseBillMaster", "PBM"); 
        if (FrmDate != string.Empty && FrmDate != null) 
     { 
      Query.Add(Restrictions.Gt("PBM.InvoiceDate", Convert.ToDateTime(FrmDate))); 
     } 
     if (ToDate != string.Empty && ToDate != null) 
     { 
      Query.Add(Restrictions.Lt("PBM.InvoiceDate", Convert.ToDateTime(ToDate))); 
     } 
     if (ShopId != 0) 
     { 
      Query.Add(Restrictions.Like("PBM.ShopNo", ShopId)); 
     } 
     if (DeptId != 0) 
     { 
      Query.Add(Restrictions.Eq("PBM.DeptId", DeptId)); 
     } 
     if (DrugId != 0) 
     { 
      Query.Add(Restrictions.Like("DrugId", DrugId)); 
     } 

     Query.Add(Restrictions.Eq("HospitalId", Convert.ToInt32(HttpContext.Current.Session["HospitalId"]))); 
     //Query.AddOrder(Order.Desc("BillDate")); 
     IList<PurchaseBillDetails> list = Query.List<PurchaseBillDetails>(); 
     return list; 
    } 

我寫了一個這樣的映射:

<many-to-one name="PurchaseBillMaster" class="Validus.Pharmacy.Domain.PurchaseBillMaster, HIS.Pharmacy" column="PURCHASE_BILL_ID" insert="false" update="false"></many-to-one> 

,但問題是它返回的重複值一次在物理表中,在給定的日期中有3行,但是impl給出了33,因爲每一行重複了很多次。

如何獲得獨特的行。請幫助。

在此先感謝。

回答

0

你應該告訴你的標準,它應該通過使用DistinctRootEntity實體變換器來過濾非唯一實體。

Query.SetResultTransformer(Transformers.DistinctRootEntity); 
IList<PurchaseBillDetails> list = Query.List<PurchaseBillDetails>(); 

下一步,我想看看你的實體的定義,更具體的許多一對多的關係。 你是否在使用一個列表或一組設置這個關係?

+0

嗨,感謝您的回覆,我的多對一關係船如下: <多對一的名稱=「PurchaseBillMaster」class =「Validus.Pharmacy.Domain.PurchaseBillMaster,HIS.Pharmacy」column =「 PURCHASE_BILL_ID「insert =」false「update =」false「>

+0

但是,您的班級中是否包含一個清單或一組清單? –