NHibernate - 按示例查询 - 子查询

时间:2009-10-07 03:27:01

标签: .net nhibernate query-by-example

我知道有很多方法可以在NHibernate中实现以下功能 - 我对其他场景不感兴趣。我想知道的是,是否可以在NHibernate中使用多对一关系和示例查询自动生成子查询。

我的设置如下:

public class Customer
{
    public virtual int ID { get; set; }
    public virtual string Firstname { get; set; }
    public virtual string Lastname { get; set; }
    public virtual IList<Orders> CustomerOrders { get; set;}
}

我的映射如下所示:

           

<property name="FirstName" type="string" length="200" not-null="true"/>
<property name="Lastname " type="string" length="20" not-null="true"/>


<bag name="CustomerOrders" cascade="save-update" inverse="true">
  <key column="CustomerID" on-delete="cascade" />
  <one-to-many class="myassembly.CustomerOrders, myassembly" />
</bag>

直接的QBE会为FirstName和/或LastName赋值,并返回包含具有该名和/或姓的客户的IList。

我想要做的是将订单添加到CustomerOrders列表,从而产生如下查询:

select * from CustomerOrders c where FirstName = 'myfirstname' and LastName = 'mylastName' inner join Orders o on c.CustomerID = o.OrderID
where o.OrderName = 'myorderName' and o.OrderNumber = 'myordernumber' 

在上面的示例中,OrderName和OrderNumber是Order Class的属性(为了简洁起见,我没有包含此类)。有谁知道这是否可能?如果我需要澄清我的问题,请告诉我。基本上我能够填充原始值并将它们包含在QBE中。我可以对收藏品做同样的事吗?

1 个答案:

答案 0 :(得分:0)

我不确定我理解......

执行此操作时:

using (ITransaction tx = session.BeginTransaction())
{
     IList<Customer> customers =  
                 session.CreateCriteria(typeof(Customer))
                .Add(Expression.Eq("FirstName", "MyFirstName"))
                .Add(Expression.Eq("LastName", "MyLastName"))
                .List<Customer>();

     customers[0].CustomerOrders.Add(new Orders());

     tx.Commit();
}

这里不是QBE而是标准API,但你可以改变。