Nhibernate多对一映射返回重复值

时间:2015-09-23 10:40:15

标签: c# asp.net nhibernate orm

我有一个主表PURCHASE BILL MASTER和一个子表PURCHASE BILL DETAILS。 我在子表中编写了一个impl来获取如下数据:

 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因为每行重复这么多次。

如何获得独特的行。请帮忙。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您应该告诉您的标准,它应该使用PICTURE_ID实体转换器过滤掉非唯一实体。

DistinctRootEntity

接下来,我希望看到您的实体的定义,更具体地说是多对多关系。 你是否在这种关系中使用List或Set?