2009-10-07 51 views
0

我知道在NHibernate中有很多方法来实现以下 - 我对其他场景不感兴趣。我想知道的是,如果可以使用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将给予名字和/或姓氏的值并返回包含具有该名字和/或姓氏的客户的IList。

我想什么做的是增加订单,导致像下面这样的查询CustomerOrders列表:Order类的

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和订单号码的属性(的利益简洁,我没有包括这个类)。有谁知道这是否可能?如果我需要澄清我的问题,请让我知道。基本上我能够填充原始值并将它们包含在QBE中。我可以对收藏做同样的事吗?

回答

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,但你可以改变。